在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在d出的文件对话框中选中要加入DLL的LIB文件。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。
2 设置工程的 Project Settings来加载DLL的LIB文件
打开工程的 Project Settings菜单,选中Link,然后在Object/library modules下的文本框中输入DLL的LIB文件,如you.lib(或者lib文件的路径,包括文件名)。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。
3 通过程序代码的方式
加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug版本,如Regd.lib;在Release方式下,产生的LIB文件是Release版本,如Regr.lib。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。
当应用程序对DLL的LIB文件加载后,还需要把DLL对应的头文件(*.h)包含到其中,在这个头文件中给出了DLL中定义的函数原型,然后声明
1. “DLL的头文件”是个模糊概念,其实应该包含“DLL模块自己用的头文件”和“给DLL以外的模块用的头文件”,但一般地,通过条件编译开关,都把这两个文件合并在一起。
2. 给DLL以外的模块用的“DLL的头文件”中不要“定义”全局变量,而应该“声明”全局变量。
3. DLL中用的全局变量应该在DLL模块内定义。(无论是DLL的cpp文件或在“DLL模块自己用的头文件”中)
下面给个例子。(例子中将“DLL模块自己用的头文件”和“给DLL以外的模块用的头文件”合并在一起)
A。DLL的cpp文件:(dlltest.cpp)
#define DLL_EXPORT //这是编译DLL模块本身 或编译其他使用者的开关
#include "dlltest.h"
long g_count = 0
int dllmul(int i, int j) { g_count++ return i*j}
B。DLL的头文件:(dlltest.h)
#ifndef DLL_TEST
#define DLL_TEST
#ifndef DLL_EXPORT
extern "C" __declspec(dllimport) int dllmul(int i, int j)
extern __declspec(dllimport) long g_count
#else
extern "C" __declspec(dllexport) int dllmul(int i, int j)
extern __declspec(dllexport) long g_count
#endif
#endif
C。使用上述DLL的程序
#include "dlltest.h"
#include "stdio.h"
int main(){
printf("The count is %d\n",g_count)
printf("5*6=%d\n",dllmul(5,6))
printf("The count is %d\n",g_count)
getchar()
return 0
}
最后提醒:如果有多个线程或进程使用你的DLL模块,注意共享变量和共享保护。可以看看Jetfrey Richter写的《Windows核心编程》
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)