C++ Windowsアプリケーションでクライアントdllを動的にロードします。だから私はACE_DLLを使用しています。私は私のアプリケーションでクライアントdllのクラスのオブジェクトを作成したいと思います。 私はラッパークラスを作成しました。メンバー関数の1つでは、ACE_DLLのオブジェクトが作成されます。 その後、そのオブジェクトを使用して、クライアントDLLをロードしています。次に、ACE_DLLオブジェクトを通してシンボル関数を呼び出し、クラスのコンストラクタの名前をクライアントdllに渡します。次に、コンストラクタのアドレスを含む関数ポインタ(_entry)を呼び出していますが、今回は「処理されない例外(アクセス違反)」というエラーが発生します。ACE_DLLを使用してクライアントC++ dllを動的にロードし、未処理例外としてエラーを返します。
私のアプローチが正しいかどうか教えてください。以下は私のアプリケーションの呼び出しシーケンスです。
ACE_DLL* _pDll;
typedef Test* (*TestFP)();
TestFP _entry;
_pDll = new ACE_DLL();
_pDll->open("dllname_to_be_opend");
std::string sSymbol = "Test";
//クライアントDLL
_entry = (TestFP) _pDll->symbol(sSymbol.c_str());
:0xc0000005で:アクセス違反書き込み位置0x00362b0c。
は、ありがとう権利について見え プラサド
いいえ。マイテストアプリケーションが実行されていません。未処理の例外としてエラーを通知します。私は混乱している、私はクライアントのdllでtestクラスのコンストラクタのアドレスを取得することができますシンボル()メソッドを使用して、この関数のポインタを呼び出すと、テストクラスのオブジェクトを作成します。 –
テストプログラムが実行されていない場合は、ビルドの問題が発生している可能性があります。あなたの環境に最もよく合ったビルドスコアボード(http://www.dre.vanderbilt.edu/scoreboard/)のビルドセットアップと、何が違うのかを比較することをお勧めします。 DLL_Testを動作させることができたら、戻ってプログラムを再実行してください。 –