C++ で Qt 4.8 を使用します。実行時にロードおよびアンロードされるアプリケーション プラグインを使用しています。アプリケーションの存続期間中に、同じプラグインが複数回ロードされる場合があります。これらのプラグインの 1 つはQ_DECLARE_METATYPE
、QVariant
. プラグインが後で再ロードされると、古い宣言はまだアンロードされたライブラリの元のメモリ空間を指しています。QVariant
これにより、Qtが再宣言されたメタ タイプからを作成しようとすると、アクセス違反が発生します。で同様の問題をすでに処理しましたqRegisterMetaType()
。ライブラリがロードされたときにメタ タイプを登録し、ライブラリがアンロードされる直前にそれらのタイプを登録解除します。残念ながら、メタ タイプを登録するのではなく、宣言する場合、それはオプションではないようです。
メタ タイプを宣言するライブラリが複数回ロードおよびアンロードされるケースを効果的に処理するにはどうすればよいでしょうか?