2011-12-30 16 views
0

私はプラグインシステムを実装しようとしていますが、いくつか問題があります。deleteを呼び出す前に動的に割り当てられたオブジェクトが削除されましたか?

extern "C" __declspec(dllexport) void InitPlugin(PluginManager* pMgr) 
{ 
    pMgr->RegisterPlugin(new MyPluginObject); 
} 

MyPluginObjectは純粋仮想PluginObjectクラスから派生:プラグインDLLで、私はこのコードのようなものを持っています。 PluginManager::RegisterPlugin()には、プラグインオブジェクトへのポインタが後で使用するために保存されます。私は首尾よくMyPluginObjectの関数をRegisterPlugin()から呼び出すことができますが、InitPluginが返されると、RegisterPlugin()に格納されたプラグインオブジェクトを使用しようとするとアクセス違反が発生します。これをどうやって解決するのですか?

+0

プラグインオブジェクトにはどのようにアクセスしますか?あなたはどのようにマネージャからプラグインオブジェクトを返すのですか?プラグインオブジェクトはどのようにマネージャに保存されますか? –

+0

@Joachimプラグインオブジェクトは、クラスへの他のポインタと同様にアクセスされます。 pMyPluginObject-> DoSomething()。プラグインオブジェクトへのポインタはstd :: vector に格納され、std :: vector(return plugins [n])からマネージャから返されます。 – Mark

答えて

1

もちろん、私はここで質問し、10分後にそれを理解します。この問題は実際には何の関係もなく、代わりに私自身のクラスを使ってDLLファイルの読み込みを処理していました。クラスが誤って削除されて、DLLがアンロードされたため、DLLからすべてが無効になっていました。

関連する問題