您的位置:首页 > 编程语言 > Qt开发

关于Qt solution中qtwinmigrate framework的一个bug

2009-12-28 15:33 651 查看

版权声明

请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: