VC++ 静态DLL模板-隐式调用

1、VS2003新建DLL项目dllTest

2、项目dllTest中添加脚本lib.h,代码如下:

1 //lib.h
2 #ifndef LIB_H
3 #define LIB_H
4 extern "C" int add(int x,int y);
5 extern "C" int mius(int x,int y);
6 #endif 

3、项目dllTest中添加脚本lib.cpp,代码如下:

 1 //lib.cpp
 2 #include "lib.h"
 3 int add(int x,int y)
 4 {
 5     return x + y;
 6 }
 7 int mius(int x,int y)
 8 {
 9     return x - y;
10 }

4、项目dllTest中添加脚本lib.def,代码如下:

1 LIBRARY dllTest
2 EXPORTS
3 add @ 1 
4 mius @ 2

5、build生成libTest.lib及libTest.dll
6、添加检测项目dllCall

7、添加主程序脚本dllCall.cpp,代码如下:

特别说明:与静态DLL模板中对比就会发现,此处并没用引用dllTest的头文件lib.h,同时声明与动态声明也有些不同,但却是静态引用。关键是dllTest项目中lib.def导出接口模块定义所致。同时因为是静态引用就需要所加载的dllTest.dll文件必须在当前目录下!

 1 #include "stdafx.h"
 2 #include "windows.h"
 3 
 4 #pragma comment(lib,"..\\Debug\\dllTest.lib") 
 5 //在link时,应链接dllTest.lib文件
 6 //Lib库中仅仅是关于其对应DLL文件中函数的重定位信息
 7 extern "C" _declspec(dllimport) add(int x,int y); 
 8 extern "C" _declspec(dllimport) mius(int x,int y); 
 9 
10 int main(int argc, char* argv[])
11 {  
12     printf("2 + 3 = %d \n",add(2,3));
13     printf("2 - 3 = %d \n",mius(2,3));
14 
15     return 0;
16 }

8、Ctrl+F5调试运行后,如图:

posted @ 2013-10-24 15:07  Faint@LastStep  阅读(549)  评论(0编辑  收藏  举报