max-walker

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

首先我们得分清楚概念。

dll是动态库,lib是静态库。

 

制作静态库可以参考这个链接:https://blog.csdn.net/qq_41897973/article/details/105265903?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242

而调用静态库的时候,将lib和相应的头文件添加到项目中即可。

 

动态库:

这个是使用vs2019的动态链接库项目进行生成的库(dll链接库)

https://blog.csdn.net/qq_30139555/article/details/103621955      

 

上面这个链接是建立一个动态库。也会生成lib库,注意这个时候生成的lib库内存大小比dll库小,说明lib只是一个导入库而已,并不是真正的代码库。这个时候想调用这个库,一样把lib、dll、相应的头文件.h都放进新项目中。这样就实现了隐形调用dll库了。

而显性调用dll库,是只有dll文件的时候。清楚库内部的函数定义的情况下,进行操作。

显性操作比较麻烦。

下面这个示例

//需要调用的dll文件名:TextDll.dll
//需要调用的函数原型是:void SayHello()
#pragma comment(lib,"TextDll.dll")  //vs项目进行链接dll文件
typedef void (*Say)();  //定义一个这样的保存指针

HMODULE hModule = LoadLibrary(L"TextDll.dll");
if (!hModule)
{
	cout << "Error!" << endl;
}

Say pg = (Say)GetProcAddress(hModule,"SayHello");  //加载函数
pg();                  //执行
FreeLibrary(hModule);  //释放加载的内存

  

 

posted on 2021-09-14 09:43  max-walker  阅读(198)  评论(0)    收藏  举报