VS2017 用MFC调用QT 带界面的动态库DLL
本文主要参考 https://blog.****.net/shuishanga/article/details/52183159文章, 本文与其相似很多。
主要是平台不一样,记录下实现过程。
VS平台:VS2017
QT:5.11.2
目的:使用MFC 调用QT动态库。
使用到的辅助文件 qtwinmigrate,可以在这个网址下载。https://github.com/qtproject/qt-solutions
注意地方:编译QT文件时使用的MinGW_32bit编译器,VS用的是32位的。
一。开始编辑qtwinmigrate
2.把原来的导出函数更改成生成相关的代码。
extern "C" __declspec(dllexport) bool showDialog( HWND parent )
{
QWinWidget win( parent );
win.showCentered();
CMyialog mydlg(&win);
mydlg.exec();
return TRUE;
}
这两步过后qtwinmigrate完成,编译生成DLL文件,然后复制出该动态库的依赖文件。
1.将生成的文件单独复制到D盘MyDLL文件夹
2.打开QT windeployqt.exe,输入动态库存放路径后开始复制依赖文件
等待复制完成后待用。
用VS2017新建一个对话框32Bit的,放置一个启动QT对话框按钮。
按钮的响应事件为
void CMy1112Dlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
/**************************************************************/
HMODULE hDLL = LoadLibrary(_T("qtdialog.dll"));
if (hDLL != NULL)
{
typedef bool(*pShow)(HWND parent);
pShow fp1 = pShow(GetProcAddress(hDLL, "showDialog"));
if (fp1 != NULL)
{
fp1(theApp.m_pMainWnd->m_hWnd);
}
FreeLibrary(hDLL);
}
else
{
/* CString strInfo;
strInfo.Format("Cannot Find %s", dllName);
MessageBox(strInfo);*/
}
}
编译生成可执行文件,将上面生成的QT动态库和依赖文件全部复制到MFC可执行文件中。