永发信息网

如何正确创建DLL和使用DLL

答案:2  悬赏:0  手机版
解决时间 2021-03-15 06:52
如何正确创建DLL和使用DLL
最佳答案
一、DLL中导出类、函数、对象
1. 创建一个空的Win32 Dynamic-Link Library项目Test
2. 在项目中添加一个Test.h头文件,该文件的内容如下://导出类class __declspec(dllexport) CTest
...{
...};//导出函数__declspec(dllexport) void FuncTest();//导出对象extern __declspec(dllexport) CTest ObjTest;这段代码中通过__declspec(dllexport)导出了类CTest、函数FuncTest和对象ObjTest。在.cpp文件中实现上面的声明与类的定义后,经编译就可以生成一个.dll和.lib文件了。
二、静态加载DLL
1. 新建一个Win32 项目。
2. 将上面编译生成的.lib文件复制到,该项目下。
3. 在项目中添加一个Test.h(通过该文件实现对DLL的静态加载),该.h文件的内容主要是从DLL的.h文件中复制过来。具体内容如下:
#pragma comment(lib, "test.lib")//导入类class __declspec(dllimport) CTest
......{
...};//导入函数__declspec(dllimport) void FuncTest();//导入对象extern __declspec(dllimport) CTest ObjTest;这个.h文件与dll的.h的不同就是,在开头加了#pragma comment(lib, "test.lib"),以及类、函数、对象前面的__declspec(dllexport)变成了__declspec(dllimport) 。通过这些修改就可以告诉编译器,这个.h文件中定义的类、声明的函数和对象 都是从test.dll中导入的。在项目中完成对这些类、函数、对象的调用代码后,就可以将其编译成可执行文件。将生成的可执行为文件、以及上面生成的.dll文件复制到同一个文件夹中就可以正常运行这个可执行文件。
三、动态加载DLL
LIBRARY TestImpEXPORTSObjTestFuncTest在完成.def文件后,重新编译dll。重新编译dll后就可以对该Dll进行动态调用了,调用过程的代码如下:
typedef void (*HFUNC)()
HINSTANCE hDLL = LoadLibrary("Test.dll"); //加载DLLif(hDLL)
...{
HFUNC hFun = (HFUNC)GetProcAddress(hDLL, "FuncTest"); //获得Dll中FuncTest函数的指针。
if (hFun)hFun(); //执行函数FuncTestelse
... //没有找到函数FuncTest}else
...{
//加载失败} 上面的代码实现的对DLL中函数的动态调用,在代码中通过LoadLibrary将DLL加载到内存中,然后GetProcAddress获得指定函数所在的内存地址(即该函数的函数指针),获得指向这个函数的指针后就可以对它进行调用了。
对于DLL中对象的动态调用过程基本上是一样的,先将DLL加载到内存,然后通过GetProcAddress获得对象所在的地址。
从上面可以看出,DLL的动态调用过程就是将DLL加载到内存,然后通过GetProcAddress获得DLL中指定对象或函数在该内存中的地址,通过该地址就可以对函数或对象进行调用。由于在C++中没有类的对象,也没有类指针一说,所以是无法动态使用DLL中的类的。
全部回答
如何正确创建dll和使用dll创建的话,你可以在新建项目中选择创建dll工程,具体的选择位置跟编译器类型和版本有关,就是跟在选择win32控制台项目一样的地方。在创建的文件中,你编写的代码需要有导出的东西,编译执行
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
劲椎病能用乐利来的透皮蒸疗吗?
香炉礁街道365市民中心地址在哪,我要去那里
有人给我解释逆天而行的意思吗
吉兰德村这个地址在什么地方,我要处理点事
浩姹月7日恐怖博士怎么通关
世纪超星怎么样
法律援助便民服务大厅地址有知道的么?有点事
怎样消除手机电池的记忆效应求答案
斯柯达晶锐CD机故障,在播放时经常开启,断线
如果有两个男生放在你面前你会选哪一个? A(
我不敢去跟别人交往,我害怕别人说我哪里不好
一场风波一场梦作文题目意思
幸福农家饭店地址在哪,我要去那里办事
我的女朋友让我拉手就是不让我抱,也不让我吻
我想问问有什么办法能把手机带回学校
推荐资讯
汽车撞人了在医院里没有抢救过来所垫付的医疗
中文翻译成日文怎么写
大众专业修脚房攀枝花NO.2我想知道这个在什么
爱莉的好爸爸全集百度云,
大黄堡镇地址在哪,我要去那里办事
苹果手机把屏幕摔坏了但是还可以开机为什么就
西里意大利面地址在哪,我要去那里办事
食用碱洗碗好吗,洗碗用洗洁精好还是用食用碱
途家主题宾馆在哪里啊,我有事要去这个地方
10元可交易的微交易 10元起的微交易有哪些
茅塔乡在什么地方啊,我要过去处理事情
蒸馒头小苏打放多少
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?