经常使用到第三方库。比如:glut,freetype,sdl,大一点的有CEGUI,OSG等。
这些库虽然是开源的,但是很多时候只是使用他们,一般不会去修改。
使用就会涉及到三个东西:.h .lib .dll文件。
主要有三种模式:
.h+.lib
.h+.lib+.dll
.dll
第二种是最常见的,其他两种都比较少
一,下面自己实现一个dll和lib:
英文链接网址:http://msdn.microsoft.com/en-us/library/ms235636(VS.80).aspx
注意我的编译器是vs2005。
1,建立一个win32控制台应用程序, 输入工程名字后点击 确定 点击下一步, 选择应用程序类型: DLL 附加选项选择:空项目 。点击确定
2,在空的工程中添加头文件MathFuncsDll.h ,内容如下:
// MathFuncsDll.h
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);
// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);
// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);
// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}
3,添加MathFuncsDll.cpp文件内容如下:
// MathFuncsDll.cpp
// compile with: /EHsc /LD
#include "MathFuncsDll.h"
#include <stdexcept>
using namespace std;
namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}
double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}
double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}
double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}
}
4, 设置工程属性:
左边解决方案资源管理器中右击工程名:弹出的对话框中:左边,配置属性:/ 常规 下: 右边 配置类型:选择 动态库(.dll)
然后点击生成:/ 生成 MathFuncDll。
此时可以到debug文件夹下去查看一下: MathFuncsDll.dll MathFuncsDll.lib 这两个文件是我们最关心的。注意此时的MathFuncsDll.lib文件只有3kb大
二,使用dll和lib文件
新建一个空的win32控制台应用程序:UseMathDll项目名字
添加cpp文件MyExecRefsDll.cpp:
#include <iostream>
#include "MathFuncsDll.h"
#pragma comment(lib , "MathFuncsDll.lib") //导入lib文件
using namespace std;
int main()
{
double a = 7.4;
int b = 99;
cout << "a + b = " <<
MathFuncs::MyMathFuncs::Add(a, b) << endl;
cout << "a - b = " <<
MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
cout << "a * b = " <<
MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
cout << "a / b = " <<
MathFuncs::MyMathFuncs::Divide(a, b) << endl;
system("PAUSE");
return 0;
}
然后将MathFuncsDll.lib 和 MathFuncsDll.h文件 放到和MyExecRefsDll.cpp一个文件目录下,也就是当前目录下。将MathFuncsDll.dll可以放到system32下,当然了最简单的做法就是放到UseMathDll这个工程的debug或者release文件夹里面,将来生成的exe就可以直接在当前目录下找到需要的dll文件。
此时就可以点击运行了:
结果如下:
a + b = 106.4
a - b = -91.6
a * b = 732.6
a / b = 0.0747475
请按任意键继续. . .
三,直接使用.h 和 lib文件
还是打开MathFuncsDll工程项目,依照条目一中的设置工程属性:不过最后的配置类型 选择 静态库(.lib)
然后生成MathFuncsDll,然后到debug下面看一下,此时的MathFuncsDll.lib文件变成了29k
然后把MathFuncsDll.lib替换掉UseMathDll工程目录下的原来的MathFuncsDll.ib文件,而且把Debug下的MathFuncsDll.dll删掉,UseMathDll照样正常运行。