最近使用Qt编写了一个带界面的dll项目,使用Qt可以直接调用其导出的类,但是现在有个想法,如果使用MFC该如何调用Qt生成的dll呢?
在网上搜索资料,找到的都是关于用Qt如何导出函数,然后调用的例子,想来也是,毕竟Qt和MFC是不同的框架,如果是Qt导出的类,MFC应该是无法直接调用的,所以退而求其次能够调用Qt导出的函数也是极好的。
网上看到一篇《MFC 下调用Qt编写的含界面的dll》的文章,比较复杂,使用了qtwinmigrate,可能是因为版本的原因,新版本的Qt直接导出就可以使用了,我这里讲的办法比他的要简单很多,几乎就是直接导出,导入使用。
先看下Qt版本:
使用QtCreator编写任意带界面的dll,记得要保证该dll正常导出,也就是Qt本身可以直接调用。
然后在项目中添加一个文件,比如main.cpp,内容如下:
//author:autumoon
//联系QQ:4589968
//日期:2021-07-13
#include "LanManagerSo.h"
#include <QApplication>
extern "C" __declspec(dllexport) int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LanManagerSo w;
w.show();
return a.exec();
}
重新编译,生成dll ,使用windeployqt命令,添加必要的依赖dll。
使用vs编写对话框程序,输入关键代码:
HMODULE mod = LoadLibrary(_T("LanManagerSo.dll"));
DWORD err = GetLastError();
if (mod)
{
typedef int(*Mymain)(int argc, char *argv[]);
Mymain mmain = (Mymain)GetProcAddress(mod, "main");
char* b = "abc";
char**a = &b;
mmain(0, a);
FreeLibrary(mod);
}
else
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
将前面准备的dll以及依赖拷贝到调试目录:
编译运行,界面出现!
欢迎交流与讨论。