MFC调用QT编写的动态库,如果QT dll里面用到了一些消息循环相关的接口,比如QTimer,QEventLoop等,会由于没有QAppAplication而导致这些调用出现异常,如果DLL里面没有界面显示的话,解决方法还是相对比较简单的。主要思想是使用windows API hook函数,将MFC的消息丢入QT去绕一圈,然后再交由MFC去处理,这样QT便有激活处理自己的消息,如果本生已经是QT应用,则不做任何处理。
static bool g_bOwnApplication = false;
static HINSTANCE g_hInstance;
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
g_hInstance = hInstance;
if (dwReason == DLL_PROCESS_DETACH && g_bOwnApplication)
delete qApp;