经常使用到第三方库。比如: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照样正常运行。