私のアプリケーションでは、LoadLibrary
,およびFreeLibrary
を使用して、プラグインのアーキテクチャが実装されています。これは、生産に取り組んでいますテストハーネスで現在実行可能なディレクトリを取得できません
string FileSystem::GetPathToProgramDirectory(){
char progname[MAX_PATH];
GetModuleFileNameA(NULL, progname, MAX_PATH);
PathRemoveFileSpecA(progname);
return string(progname);
}
、私がしようとすると、すべての私のDLLは、私は、DLLを探したときに、私はこの機能を使用して、実行可能ファイルのディレクトリを取得し、そこに検索し、実行ファイルと同じディレクトリにあるので、これをNUnitを使った統合テストの下で実行すると、実行可能なディレクトリはNUnitになり、読み込みに失敗します。 これは管理されていないC++です。管理されたC++では、私はPath::GetDirectoryName(Assembly::GetExecutingAssembly()->Location)
を使ってこれを解決しましたが、どちらの場合でも動作しますが、管理されていないケースが私を困惑させました。それに対応するWinapiの管理対象外のものはありますか?ここ
私はいつも 'DllMain'のDLLに渡されるときにモジュールハンドルを覚えている方が好きです。 –
@David:良い点、私はそのSOの投稿にも言及されていないことに驚いています。 @dario_ramosの場合: 'DllMain'エントリポイント(http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx)を見てください。最初のパラメータはDLLを処理します。 –
@dario_ramos:あなたが言っていることを誤解するかもしれません。ここに私の要点があります:コントローラ/マネージャDLLに関連するいくつかのディレクトリにある他のDLLに実装されているプラグインを制御/管理するいくつかのDLLにあるコード(質問のコード)があります。その場合、コントローラー/マネージャーDLLへのハンドルを取得することができます(リンク先のSOポストまたはDavidのメソッドを使用して)GetModuleFileNameを使用してフルパスを取得し、取得する必要のある操作を行いますあなたのプラグインディレクトリ... –