サブフォルダの DLL を暗黙的にリンクしたい – プログラミング – Home

サブフォルダの DLL を暗黙的にリン...
 
通知
すべてクリア

[解決済] サブフォルダの DLL を暗黙的にリンクしたい


たに
 たに
(@たに)
ゲスト
結合: 17年前
投稿: 13
Topic starter  

いつもお世話になっています。

DLL を暗黙的にリンクするときに、DLL は
1. 実行中のプロセスの実行形式モジュールがあるフォルダ
2. 現在のフォルダ
の順に検索されますが、2 より優先的に
「実行中のプロセスの実行形式モジュールがあるフォルダの特定のサブフォルダ」
を検索できるように実行ファイルをビルドすることはできないでしょうか?


引用未解決
トピックタグ
ZCH
 ZCH
(@ZCH)
ゲスト
結合: 16年前
投稿: 25
 

無理だと思います。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

環境変数 PATH にサブフォルダのパスを追加するバッチファイルを作って、そこから
exe を実行すればできるかも?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

aetosさんの方法でよくやってますよ。

特定のプロジェクトの時だけ設定したいPATHがある場合は結構便利です。
コンソールウインドウが出てしまいますからこれが嫌なら駄目かもしれませんけど。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

バッチファイルがお手軽ではありますが、同じ役目を果たす exe を作れば、コンソール
は出さずに実行できますね。


返信引用
たに
 たに
(@たに)
ゲスト
結合: 17年前
投稿: 13
Topic starter  

みなさんありがとうございました。

実は EXE はすでにユーザーの PC にインストールされていて私が開発している
のはその EXE のためのプラグインです。そのプラグインは DLL として作成しま
すがその DLL は暗黙的にいろいろな DLL をリンクしています。
なのでその EXE の実行方法をプラグイン開発者が変更するのは難しいです。

そこで別の方法を思いついたのですが、EXE と現在開発しているプラグイン DLL
の間に仲介用のプラグイン DLL を置き、仲介プラグインが本来のプラグインを
LoadLibrary() してそのプラグインに処理を委譲する方法です。

仲介プラグインのエントリーポイント (DllMain 以外) の中で最初に呼び出さ
れたところで LoadLibrary() し、その DLL の各エントリーポイントへのポインタ
を取得します。このとき一時的に環境変数 PATH を書き換えて本来のプラグインが
暗黙的にリンクする DLL の検索パスを自由に変更できます。
LoadLibrary() が終わったら即座に PATH を元に戻して他のプラグインへの影響を
極力抑えます。

後は単純に取得した関数へのポインタを使って本来のプラグインへ処理を委譲する
だけです。

この方法で今までに作ったプラグインを再ビルドすることなく暗黙的にリンク
する DLL を任意の場所に移せるようになりました。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

余談ですが、Windows7 & Windows Server 2008 R2 以降であれば、Private Assembly
Probing Path を指定することで、普通に暗黙リンクできると思います(未検証)。
http://msdn.microsoft.com/en-us/library/aa374182(VS.85).aspx


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました