近期,研究了下将qt程序封装成dll,与其他程序(mfc、c#)进行调用交互,主要涉及几个方面内容:
一、qt生成dll
按照qt官方引导,可以很简单的生成dll,但是此类dll只能与qt程序进行交互;由于qt 的事件循环机制与windows寻坏机制不同,要想在其他程序中启动qt的dll,必须加入QApplication,以启动qt的事件循环机制。
通过官方发布的qtwinmigrate文件,可以非常方便的实现dll。加载exmaples/qtdll的.pro工程文件,在qtcreator可以看到main.cpp有这两个函数
BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReserved*/ )
{
//此蔚dll的入口函数
static bool ownApplication = FALSE;
//启动QAppliction,具体见帮助说明
if ( dwReason == DLL_PROCESS_ATTACH )
ownApplication = QMfcApp::pluginInstance( hInstance );
if ( dwReason == DLL_PROCESS_DETACH && ownApplication )
delete qApp;
return TRUE;
}
//建立导出函数
extern