您的位置:首页 > 财经 > 产业 > 互联网营销师证书是国家认可的吗_表白网页生成器下载_百度seo怎么优化_网络营销活动策划方案

互联网营销师证书是国家认可的吗_表白网页生成器下载_百度seo怎么优化_网络营销活动策划方案

2025/3/16 14:37:49 来源:https://blog.csdn.net/qq_37366618/article/details/145531740  浏览:    关键词:互联网营销师证书是国家认可的吗_表白网页生成器下载_百度seo怎么优化_网络营销活动策划方案
互联网营销师证书是国家认可的吗_表白网页生成器下载_百度seo怎么优化_网络营销活动策划方案

VS2022 C++创建和调用DLL动态链接库(包括子类的第三方库)

正在做的项目越来越大,都在一个项目里面就太臃肿了,编译起来耗费的时间越来越久,代码文件太多又难找,快速浏览的读条都要等好久,我是终于开始正视链接库的重要性了。项目大了还是得过这关啊。搞清楚了整套方法后就写下这篇以免日后忘记了。

下面第3点一定要注意。


0.什么内容要写成DLL链接库

可以用模块的角度去看,假设现在一个软件有读取,处理,输出的功能。那么可以将它视为有读取模块、处理模块和输出模块。看处理模块里面又能分为几个处理不同需求的功能,那么又可以视作功能A模块,功能B模块等。

如果功能A模块和功能B模块之间没有依赖,那么就是我分开写他们也不会出问题,那么我可以把功能A模块写一个DLL项目,功能B也写另一个DLL项目。另外,读取模块也可以写成一个DLL项目。

以读取模块为例,我的读取模块是要实现读取3D模型文件的,包括STL,OBJ,PLY这些格式的模型文件。那么我这个读取模块写成一个DLL项目,项目内创建四个类,其中一个Reader抽象类作为基类,另外三个类STLReader,OBJReader和PLYReader继承Reader类,这四个类作为这个读取模块。

而软件主体就视作一个框架,引用这些模块则相当于调用DLL动态链接库。

创建DLL动态链接库之前要搞清楚你的需求。

创建DLL动态库和LIB静态库在我看来最直接的区别是,DLL动态库能够直接正常引用第三方库库,LIB静态库试了没成功。


1.从创建解决方案开始新建一个项目

首先创建一个控制台项目,也可以是空项目。这个项目视为你的主项目,或者说是软件的框架了。主项目要引用你的各个模块。


2.创建一个DLL动态链接库项目

创建DLL项目跟创建控制台项目一样, 有模板可以选,不用模板的话可以创建空项目。区别在于模板会自动生成预编译头pch.h和pch.cpp文件,还有涉及DLL导入导出的代码内容。影响你的编译后得到的是可执行文件exe还是链接库的地方在配置类型:(所以创建空项目的话必须设置好这个)
在这里插入图片描述


3.DLL项目中内容的书写(重中之重,导入导出)

这点是最重要的地方了,也是很多教程不讲清楚的地方。代码文件里面内容没写对,生成项目也会没法得到dll、lib文件。

DLL项目写完是要给主项目引用的,所以涉及导入、导出问题

先解释导入和导出:

导入关键字:__declspec(dllimport)
__declspec(dllimport)用于将函数、变量或类从DLL导入,使其可以在其他模块中使用。

导出关键字:__declspec(dllexport)
__declspec(dllexport)用于将函数、变量或类从DLL导出,使其可以被其他模块(如可执行文件或其他DLL)使用。

我们关注导出,我们在DLL项目里面创建类,类要给其他模块使用,那么得显式导出这个类才能被引用。(惯性思维是我在DLL项目如往常一样创建一个类,然后能在main函数中之间包含调用,但在这里并不是这样的)

我们需要为这个类加上导出声明,它才能被引用。

一般我们都会见到类似下图这样的模板:
在这里插入图片描述
先介绍一下,这是利用宏来简化导出和导入的声明。

如果定义了SLICER_EXPORT那么SLICER_API则定义为导出。(这里的定义都是人为define)

所以你要让你的类能被调用的话,请定义导出,图里就是define了SLICER_EXPORT。

其实,可以粗暴简单点,直接

#define SLICER_API __declspec(dllexport)   //SLICER_API可以随意命名,__declspec(dllexport)是关键字,就得这么写

然后重要的来了:
请为你的类加上导出声明:

class SLICER_API Slicer{...}; //Slicer是类名,SLICER_API是导出声明

类的内部正常写就可以了。


4. 在主项目里引用DLL链接库

DLL项目里面不需要main函数,你写好你的类就生成项目就可以。生成后能够在生成文件夹中得到dll和lib文件,这两个文件用于给主项目引用。引用方式跟依赖第三方库是一样的。

而.h头文件需要复制粘贴到主项目文件夹里面,或者在项目属性里填包含目录,让项目能够读取到.h文件就行了。

实际上,编译生成DLL链接库后,得到的内容跟平常使用的第三方库的内容是一致的,dll文件存放在bin文件夹内,lib文件存放在lib文件夹内,.h头文件存放在include文件夹内。


5.问题1:编译生成后没有得到dll文件

生成dll文件需要DLL项目内有个cpp代码文件才行。dll文件主要存放的是代码实现的内容。


6.问题2:编译生成后只有dll文件,没有得到lib文件

没有lib文件,就是没有导出你的类,或者说你的DLL项目没有导出内容。 再检查一下你的define处亮的是不是导出,而不是导入。
在这里插入图片描述
如果dllexport没有亮的话,需要先define一下。然后为你的类加上导出声明。


7.DLL项目里面能不能依赖第三方库

dll项目里面可以依赖第三方库,引用第三方库的方法没有区别,正常引用就可以了。因为每个DLL项目都是独立配置的,所以不同的DLL项目如果都用到同一个第三方库的话,最方便的方法就是为每个DLL项目都配置引用该第三方库。


8.DLL项目里面需要写子类,怎么声明导出

子类正常继承父类,同样在类名前加上导出声明即可。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com