c++ Lib Dll及相关头文件关系和怎么 *** 作

c++ Lib Dll及相关头文件关系和怎么 *** 作,第1张

1 LIB文件直接加入到工程文件列表中

在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核心编程》


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12109068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存