DelphiでDllを使用する場合、Cなどではパスを設定で通しますが、Delphiはどうしていますか?
実行するExeと同じフォルダに入れるとかSystem32に入れるとかあると思います。
System32に入れた場合は参照できるのですが、たまに同じフォルダにいれておいても参照されないことがあり、どこで明確に設定しているのか(環境設定のLibraryPathで設定?)よくわかりません。
こういった設定をした場合はどこから優先されて参照するなどありましたら教えてください。
よろしくお願いします。
CでもDelphiでもパスは指定可能ですが・・・
どの部分で呼び出そうとしてますか?ケースバイ?なので
もうすこし詳細にかかれると、判りやすく説明可能なのですが。
参照順序に関してですが、基本的には起動>環境変数(Windows)
って感じだったと思うのですが、起動場所の場合は初期状態だけです
何かで基本パスが変更になった場合は、その場所にDLLが存在するかに
なると思います(なので、そんな使い方は普通はしません)。
環境変数内でも複数の同DLLの場合は、記載順番だったような記憶があります。
回答ありがとうございます。
なるべくは起動と同じフォルダにおいておきたいです。
またその場合に環境設定のLibraryPathで設定したいと考えています。
そこで設定しておけば参照してくれるということですね。
起動>環境変数(Windows)というのは
ProjyectOptionのSerchPath > 環境設定のLibraryPath > 環境変数
といった優先順位でしょうか?
この3つで参照のパスが通った場所に同じDllを置いた場合は上記優先順位になりますか?
DLLがロードされるパスというのはLoadLibrary関数の仕様に従います。
CやDelphiなど開発環境の設定とは直接関係はないはずです。
http://msdn.microsoft.com/ja-jp/library/cc429241.aspx
これによると、ファイルパスを指定しなかったときの検索順序は
アプリケーションのロードされたパス、カレントディレクトリ、
WindowsやSystemのディレクトリと来て一番最後がPATH環境変数ですね。
exeと同じところに置いてもロードできないというのは
実は別の場所にあるexeを実行しているという可能性があります。
実行>実行時引数 の設定で「ホストアプリケーション」のところに
余計なパスを入れてしまっていたりしないでしょうか?
そうですか。
うーん、ではLoadLibraryを使用しない静的呼び出しを行っているファイルをUsesで呼び出しているプロジェクトはそのプロジェクトの起動するフォルダにDLLおいておくということでよいのでしょうか?
静的呼び出しで external 'Hoge.dll’とした時です。
torさん
実行>実行時引数 の設定とはどこかの設定項目のことでしょうか?
> ではLoadLibraryを使用しない静的呼び出しを行っているファイルをUsesで呼び出しているプロジェクトはそのプロジェクトの起動するフォルダにDLLおいておくということでよいのでしょうか?
アプリケーションのロードされたパスというのは、exeが起動するパスということです。
なので一般的には、exeがあるのと同じディレクトリに置いておけばいいはずです。
プロジェクトのオプションで「ディレクトリ/条件」タブの「出力ディレクトリ」にパスが指定されていれば、そこが起動パスということになります。
> 実行>実行時引数 の設定とはどこかの設定項目のことでしょうか?
メニューの「実行」の下に「実行時引数...」という項目があります。
ツイート | ![]() |