托管c++编译错误 error LNK2019: 无法解析的外部符号 "public: __thiscall

错误原因:没有添加lib文件。添加以下代码即可

#pragma comment(lib,"../ProjectApplication/bin/Debug/CapConfig.lib")

重新学习了lib文件的作用:

动态链接的情况下,会生成两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是 DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。

 

所以,当要引用某个工程时,必须添加以下代码

#pragma comment ( lib,"xxx.lib" )  

表示链接xxx.lib这个库,告诉编译器你要用到xxx.lib库,这和在工程设置里写上链入xxx.lib的效果一样,不过这种方法写的 程序别人在使用你的代码的时候就不用再设置工程settings了。

 

使用lib需注意两个文件:
(1).h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。
(2).lib文件,#pragma comment ( lib,"xxx.lib" )  。

使用dll需注意三个文件:
(1).h头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。
(2).LIB文件,是dll在编译、链接成功之后生成的文件,作用是当其他应用程序调用dll时,需要将该文件引入应用程序,否则产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。
(3).dll文件,真正的可执行文件,开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,并不需要.lib文件和.h头文件。

 

参考:

https://www.cnblogs.com/405845829qq/p/4108450.html

你可能感兴趣的:(C++)