MFC和Qt分别使用Qt生成的Dll。

来源:互联网 发布:手机动漫壁纸软件 编辑:程序博客网 时间:2024/05/24 05:03

MFC和Qt分别使用Qt生成的Dll。

1、2017年8月3日17:56:33。

#ifndef QTDLGDLL#define QTDLGDLL#ifdef QTDLGDLL_LIBRARY//#include <QtCore/qglobal.h>//# define QTDLGDLL_API Q_DECL_EXPORT#define QTDLGDLL_API __declspec(dllexport)#else#define QTDLGDLL_API __declspec(dllimport)#endif#define WIND_TYPE_NO        0#define WIND_TYPE_QT        1#define WIND_TYPE_WINDOWS   2typedef unsigned __int64 paduint64;  /* 64 bit unsigned */typedef  struct CPadSolderSpec {//面积.paduint64 m_uArea;//高度.unsigned long m_uHeight;} CPadSolderSpec;//struct CPadSolderSpec;#ifdef __cplusplusextern "C" {#endifQTDLGDLL_API int __cdecl OpenPadSettingDialogByMFC(void * ParentWind, CPadSolderSpec * pSpec);QTDLGDLL_API int __cdecl OpenPadSettingDialogByQt(void * ParentWind,CPadSolderSpec * pSpec);#ifdef __cplusplus}#endif#endif

#include "QtDlgDll.h"#include "PadSettingDialog.h"#include <QApplication> #include <QThread> #include <windows.h>bool g_bRun = false;int OpenPadSettingDialogByMFC(void * ParentWind, CPadSolderSpec * pSpec){if (g_bRun){return 0;}g_bRun = true;if (NULL == ParentWind){return 0;}HWND hParentWnd = (HWND)ParentWind;HWND hSaveParentWnd = hParentWnd;Qt::HANDLE ThreadIdBefore = QThread::currentThreadId();int argc = 0;char *argv[1] = {NULL};QApplication a(argc, argv);Qt::HANDLE ThreadIdAfter = QThread::currentThreadId();//模态对话框.CPadSettingDialog aDlg(NULL, pSpec);aDlg.setModal(true);//disable掉父窗口   hParentWnd = hSaveParentWnd;while (hParentWnd != NULL){EnableWindow(hParentWnd, FALSE);hParentWnd = GetParent(hParentWnd);}aDlg.show();a.exec();//aDlg.exec();//恢复父窗口的enable状态   hParentWnd = hSaveParentWnd;while (hParentWnd != NULL){EnableWindow(hParentWnd, TRUE);hParentWnd = GetParent(hParentWnd);}g_bRun = false;return 1;}int OpenPadSettingDialogByQt(void * ParentWind, CPadSolderSpec * pSpec){QWidget *parent = (QWidget *)ParentWind;//模态对话框.CPadSettingDialog aDlg(parent, pSpec);aDlg.exec();return 1;}

MFC:

CPadSolderSpec aSpec;void CtestMFCDlg::OnBnClickedOk(){DWORD id1 = ::GetCurrentThreadId();_TCHAR sId1[100];_i64tot_s(id1, sId1,100,16);this->MessageBox(sId1, sId1, MB_ICONINFORMATION);OpenPadSettingDialogByMFC(m_hWnd,&aSpec);DWORD id2 = ::GetCurrentThreadId();_TCHAR sId2[100];_i64tot_s(id2, sId2, 100, 16);this->MessageBox(sId2, sId2, MB_ICONINFORMATION);int a = 1;a++;// TODO: 在此添加控件通知处理程序代码//CDialogEx::OnOK();}

Qt:

CPadSolderSpec aSpec;void MainWindow::on_pushButton3_clicked(){OpenPadSettingDialogByQt(NULL,&aSpec);//OpenPadSettingDialogByQt(this, &aSpec);return;