次の例に従って、Qt / MFC移行フレームワークツールを使用しています:http: //doc.qt.nokia.com/solutions/4/qtwinmigrate/winmigrate-qt-dll-example.html
私が作成したdllは、サードパーティのMFCベースのアプリケーションによってロードされます。サードパーティのアプリは基本的に、エクスポートされたDLL関数の1つを呼び出してプラグインを起動し、別の関数を呼び出してアプリケーションをシャットダウンします。現在、シャットダウン機能では何もしていません。
サードパーティのアプリにDLLをロードすると、スタートアップ関数が呼び出され、DLLが正常に起動し、メッセージボックスが表示されます。ただし、プラグインをシャットダウンしてから再起動しようとすると、次のエラーが発生します。
Debug Error!
Program: <my 3rd party app>
Module: 4.7.1
File: global\qglobal.cpp
Line: 2262
ASSERT failure in QWidget: "Widgets must be created in the GUI
thread.", file kernel\qwidget.cpp line 1233
(Press Retry to debug the application)
Abort Retry Ignore
これにより、プラグインを適切にシャットダウンするために何かをしているのではないと思います。正しくシャットダウンするにはどうすればよいですか?
更新: http ://doc.qt.nokia.com/solutions/4/qtwinmigrate/winmigrate-walkthrough.htmlによると:
DLLは、同じプロセスで他のQtベースのDLLと一緒にロードできること(この場合、QApplicationオブジェクトはおそらくすでに存在します)、およびQApplicationオブジェクトを作成するDLLがメモリにロードされたままであることを確認する必要があります。プロセスで使用できなくなったメモリを使用する他のDLL。
それで、どういうわけか元のDLLをロードしたままにしておく必要がある問題があるのではないかと思います。