-
VS2019端:
a 基于生成一個DLL的工程(要注意生成是x86,還是x64的,需要和后面的QT的App工程對應),這里不多解釋了,網上多的是;
b 在cpp實現文件里,假如要導出一個這樣的函數:
int add(int a, int b)
{
return a+b;
}
那么,它對應的頭文件,如abc.h,一定如下:即在頭文件里,使用了extern "C"來限制這個函數名,這樣的目的是在c++編譯器下,產生c語言的編譯鏈接規則:
#ifdef __cplusplus
extern "C" {
#endifint add(int a, int b);#ifdef __cplusplus
}
#endif
(具體c++和c語言編譯鏈接規則extern "C",參考:extern “C”的作用詳解 - 狂奔~ - 博客園 (cnblogs.com)https://www.cnblogs.com/xiangtingshen/p/10980055.html)
注意,上述的cpp實現文件的函數名前,不要加extern "C"。
c 為了產生lib文件,在VS2019工程里添加def文件,這樣的目的是生成DLL后導出的函數名為add,而不是亂七八糟的添加@各種前綴;還有一個目的是生成DLL的同時,還會生成lib文件,即如果不添加def文件,默認是不會產生lib文件的。
LIBRARY
EXPORTSadd @1
d 編譯工程,產生DLL后,一定使用VS2019環境——【工具】——【VS命令提示】檢查一下產生的dll是否符合預期要求:
在彈出的控制臺輸入命令:dumpbin /exports abc.DLL
?如上圖,可以看到導出的函數名為add。
QT端:
a 生成一個基于exe的App工程,注意32位/64位,一定和上面VS工程對應;
b 在pro工程文件里添加上面VS2019生成的DLL工程引用:
LIBS += "C:/abc/Debug/abc.lib"
(注意,這里添加的是lib文件名,測試引用DLL文件名也可以!)
c 引用上面VS產生的頭文件abc.h,在cpp里直接使用add函數即可。