关于Qt solution中qtwinmigrate framework的一个bug

版权声明

请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。

在国外的一个论坛上找到的:

The WinMigration framework does the following behind the scenes when you
call QMfcApp::pluginInstance in your DllMain function for the ATTACH-case:


If qApp is still 0, then create a QApplication object, and load the DLL
again (based in the HINSTANCE parameter you pass in). This increase the
reference count of the DLL that owns the QApplication object - the DLL will
not be unloaded even if the application that explicitly loaded the DLL as a
plugin calls FreeLibrary (unless the application calls FreeLibrary more
often that it called LoadLibray, which is of course a bug in the
application).

Other DLLs loaded later will see that qApp already exists, and just share
that instance. Those DLLs will be unloaded by the application when it calls
FreeLibrary.

The DLL owning qApp will then be unloaded by the system when the process
exits. In that case, DllMain with DETACH will be called, and you can delete
qApp in your code (based on the return value of the call to pluginInstance
earlier).

All this should also work if you link against those DLLs rather than
LoadLibrary/FreeLibrary them yourself, as the system will free the DLLs
loaded during application startup in the opposite order of which they were
loaded.

你可能感兴趣的:(qt)