VS2008中生成lib和dll库文件

来源:互联网 发布:库存sql和access的区别 编辑:程序博客网 时间:2024/05/16 01:08

(1)新建项目--->win32控制台应用程序,输入项目名称,例如“dllTest”,点击确定;

(2)点击下一步:

(3)在出现的应用程序设置中,选择DLL(默认为控制台应用程序),如图所示:

(4)点击完成,之后,就可以写你的库接口代码了。

(5)这个时候,你会发现项目中出现了一个dllTest.cpp的文件,该文件的第一条语句,是这样的:#include "stdafx.h"。Stdafx.hvisual studio的预编译头文件,主要是为了加快编译的速度。为了让代码有更好的跨平台编译能力,我建议去除该选项。Stdafx.h预编译选项的去除是这样的,依次点击:dllTest(即,当前项目)-->属性-->c/c++-->预编译头如下图所示:

或许,你已经发现了,“创建/使用预编译头”的属性为“使用预编译头(/Yu)”,这里,只需用将该属性修改为"不使用预编译头"即可。如下图所示:

之后,点击“应用”,“确定”。这样,你就取消了VS2008默认的预编译选项。

(6)接着,我们来定义接口。在这里,我打算定义一个类CDllTest,该类只有一个函数,int Sum(int a, int b);完成加法运算。参考代码如下所示:

 

[cpp] view plaincopy
  1. dllTest.h  
  2. #ifndef DLL_TEST_H  
  3. #define DLL_TEST_H  
  4.   
  5. #ifndef DLL_API  
  6. #define DLL_API _declspec(dllexport)  
  7. //#else  
  8. //#define DLL_API _declspec(dllimport)  
  9. #endif  
  10.   
  11. class DLL_API CDllTest  
  12. {  
  13. public:  
  14.     CDllTest();  
  15.     ~CDllTest();  
  16.   
  17.     int Sum(int a, int b);  
  18. };  
  19.   
  20. #endif  
  21.   
  22. dllTest.cpp  
  23. #include "dllTest.h"  
  24.   
  25. int CDllTest::Sum(int a, int b)  
  26. {  
  27.     int val = a+b;  
  28.     return val;  
  29. }  
  30.   
  31. CDllTest::CDllTest()  
  32. {  
  33.   
  34. }  
  35.   
  36. CDllTest::~CDllTest()  
  37. {  
  38.   
  39. }  


(7)代码写完了,接着就是编译了,选择debug模式或者release模式都可以。不过,如果是要发布,最好选择release模式。需要提醒的是,vs2008默认是生成.dll文件,也就是所谓的动态链接库(dll, dynamic link library)。如果你需要编译静态链接库,只需要设置一下,重新编译就可以了。设置方法是:项目-->属性-->常规这里,将配置类型从动态库(.dll)改为静态库(.lib)即可

默认为动态库:

修改为动态库:

修改之后,重新编译,就生成了dllTest.lib这个静态库文件了。

(8)接下来,我们再建立一个win32控制台应用程序,来验证刚才生成的lib静态库是否可以正常工作。首先,建立一个名为TestForDllTest的工程,然后,依次选择,项目-->属性-->链接器-->输入在其中的附加依赖项属性中,填入dllTest.lib,如下图所示:

(9)点击确定,之后,把刚才dllTest工程中生成的dllTest.libldllTest.h(如果刚才生成的是动态库,就需要将dllTest.lib,dllTest.dll,dllTest.h三个都拷贝过去)文件拷贝到当前目录。这样,你就可以测试刚才生成的那个dllTest.lib是否可以正常运行了。这里不妨给出一个参考测试程序:

 

[cpp] view plaincopy
  1. #include "stdafx.h"  
  2. #include "dllTest.h"  
  3. #include "iostream"  
  4. using namespace std;  
  5.   
  6. int _tmain(int argc, _TCHAR* argv[])  
  7. {  
  8.     CDllTest dt;  
  9.     int res = dt.Sum(1, 2);  
  10.     cout<<"res: "<<res<<endl;  
  11.   
  12.     system("pause");  
  13.     return 0;  
  14. }  
原创粉丝点击