• ベストアンサー

DLLの暗黙リンクの調べ方

http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200511/05110055.txt 上記サイトと同じような現象で、loadlibraryが失敗してしまうのですが、「暗黙リンク」っていうものはどう調べたら良いのでしょうか? フルパスにしてもDLLの読込で失敗してしまって困っております。 ちなみに環境は以下の通りです。 WindowsXP VC++ 6.0 まだ初心者なので出来るだけ細かくお願いいたしますm(__)m

  • ya-cha
  • お礼率68% (184/268)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

LoardLibraryしているのに暗黙リンク? リンクしているDLLがまた別のDLLをリンクしてるケースがあるかも。 VC++6.0に確か付属していた Dependency Walker を使えば暗黙リンクしている DLLは確認できます。 動的リンクしているものはソースから調べてください。 (LoadLibraryの引数となっているパスのDLLもDependency Walkerで調べる対象)

ya-cha
質問者

お礼

ご回答ありがとうございました。また、お礼が遅くなり申し訳ございませんでした。 「Dependency Walker」を使い、足りないDLLがあることが判明いたしました。 本当にありがとうございました。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.2

動的リンクしたDLLの中で、別DLLが暗黙リンクされている場合、それを調べる方法はありません。 暗黙リンクによりDLLが探される場所は、 ・実行中のプロセスの実行形式モジュールがあるフォルダ ・現在のフォルダ ・Windows システム フォルダ ・Windows ディレクトリ ・環境変数 PATH で指定されたフォルダ になります。ここに無ければエラーになります。 従って、暗黙リンクで呼び出されるDLLは、上記のいずれかのフォルダに無ければいけません。 なお「何が理由でloadlibraryが失敗しているか、GetLastError()で調べる」のが鉄則。 GetLastError()の値を見ると「え?それが理由?それならココが悪いに決まってる」って感じで、瞬間的に答えに辿り着ける事が多いです。 >フルパスにしてもDLLの読込で失敗してしまって困っております。 原因を確認せずに「困った困った」って言われたって、こっちが困ります。 あと、まさかとは思うけど、フルパスに"C:\MyProgram\Test2\test.dll"とかって指定してたりはしませんよね? Cでは"C:\\MyProgram\\Test2\\test.dll"って感じで「\記号1個は\\のように\を2つ書く」っての忘れてませんよね?

関連するQ&A

  • 何故このページは拡張子がテキストなの?

    http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200911/09110001.txt ホームページってhtmlで終わるわけではないのですか?

    • ベストアンサー
    • HTML
  • DLLファイルの暗黙的リンクについて

    環境:WindowsXP VC2005 OpenSSLのRSA構造体を暗黙的リンクしようとしているのですが、 やり方がわかりません。 OpenSSLの関数群で、RSA構造体が使用されているのですが、 RSA構造体をdllimport出来ないので、失敗してしまいます。 [フォーマット] (例)main.c int main(void) { __declspec(dllimport) RSA* 関数名(引数); ※RSA構造体をdllimportしていないため、エラーが発生。 } 構造体をdllimportする方法をご存知の方がいらっしゃいましたら、 お願いします。

  • VC2005で作成したDLLファイルをVC2008で動的リンク(LoadLibrary)する方法

    「VC2005 Standard Edition」で作成したDLLファイルを、 「VC2008 Express Edition」で作成したコンソールアプリケーション から、LoadLibrary("VC2005で作成したDLLファイル")すると 失敗してしまいます。 GetLastErrorでエラーを取得すると、"36B1"が表示されます。 (このエラーは何か調べても見つかりませんでした) 何が原因かご存知の方がいらっしゃいましたら、 ご教授頂けませんでしょうか。

  • VB6で作成したDLLをVC6で使用する方法

    VB6で作成したDLLをVC6で使用できなくて困っています。 以下にトライしたことを示します。 (1) VB6でTRUEを返すだけの関数を入れたActiveX DLLを作成 (2) VC6のLoadLibraryに成功(戻り値がNULL以外) (3) VC6のGetProcAddressに失敗(戻り値がNULL) (4) VC.NET付属のDumpbinユーティリティでは(1)で作成した関数が表示されない。 何が悪いのでしょうか。 宜しくお願いします。

  • ライブラリ内の処理中におけるライブラリリンクについて

    VC2005を使用しています。 ライブラリからライブラリファイルって使用できるんでしょうか? (例) A.lib内の処理に、B.DLLを明示的に読み込み処理 ----------------- <A.lib内の処理> hDLL = LoadLibrary("B.dll"); // DLLのロード if (hDLL != NULL) { ~ 処理実行 ~ } ----------------- 私の環境で何度やっても、GetLastErrorにて、 "7E"(ERROR_MOD_NOT_FOUND)が出力されます。 ロードしているパスに、B.dllは必ずあります。 上記の例は明示的リンクですが、暗黙的リンクでもかまいません。 ライブラリ処理の中でライブラリファイルを使用するには、 どうすれば良いでしょうか。 もしかして、ライブラリ内で他のライブラリを使用できない 等のオチもあるのでしょうか...。

  • Excelで勝手に変わったカラーパレットの直し方

    故意に変更したわけではないのに,いつの間にかセル色や文字色を選択するカラーパレットの配色が変わってしまい,戻そうとしてもリセットが効かずに悩んでいます. 過去の質問にも全く同じ現象と思われるものがありましたが,解決には至らなかったようです. http://oshiete1.goo.ne.jp/kotaeru.php3?q=1209778 Web上で検索すると,ディスプレイドライバが関係しているらしいとわかったのですが,どうすれば解決できるのかはわかりませんでした. http://cgi.fuji.ne.jp/~fj2094/cgi-bin5/wwwlng.cgi?print+200510/05100059.txt http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200502/05020091.txt ちなみに,1箇所のみ故意に配色を変えてからリセットしてみましたが何の変化もなく,勝手に変わったところも故意に変えた配色もそのままでした.リセットボタンが機能していないのではと思います. 解決方法をご存知の方,ぜひご教示下さい.

  • 読み込むDLLのディレクトリを変更したい

    Visual C++ 7.1を使用しています。 ライブラリを使って作成したアプリを配布するとき、 一緒にDLLファイルも配布しないと起動できませんよね? 通常は、DLLファイルのパスは実行ファイルと同じか、 system32などのディレクトリに入れなければ 「~~~.dllが見つかりません。」 みたいなエラーが表示されるかと思います。 (違ったらすみません) そうではなく、DLLファイルが10個以上ありますので、 実行ファイルと同じディレクトリだとややこしくなるため、 実行フォルダより1つ下の階層にまとめて置きたいのですが、 そのような事は可能なのでしょうか? できれば、LoadLibraryなどの関数は使わず、 何かしらの設定で出来るのであればそれが望ましいです。 可能でしたら、方法をご伝授いただけると助かります。 よろしくおねがいします。 サンプルですが構成としては以下のような感じです。 (※[ ]はフォルダ名を表します) [Main]  ReadMe.txt  実行ファイル.exe  [Image]   image1.png   image2.png  [Sound]   sound1.wav   sound2.wav  [DLL]   graphics2d.dll   input.dll   sound.dll   file.dll

  • EXCEL VBAで複数人でのADO接続について

    環境はEXCEL2003です。 EXCELからCSVファイルを読込み、 それに対して処理を加え一覧表示するVBAを組んでいます。 CSVファイルの読込みにはADOを使用しており、 指定しているプロバイダはMicrosoft.Jet.OLEDB.4.0、 複数の人が同時に実行する可能性があるプログラムです。 ここで問題なのですが、 Dim con As New ADODB.Connection '入力ファイル接続用コネクション Dim connectionString As String 'コネクション接続用文字列 (中略) Set rs = con.Execute(SQL) とSQLを実行する際に、 複数のユーザが同時に実行すると、 一人を除いて添付のようなエラーが発生してしまいます。 調べてみたところ、 http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200401/04010032.txt こちらのエラーが近いのかと思いますが、 >JET経由でのADOでDBをオープンする場合、必ず、1ファイル >1コネクションで行って下さい。 と記載があるところを見ると、 CSV読み込みの場合も複数人での接続は無理なのかな…と思いつつあります。 ※ファイルは、読取り専用で開ければ良いのですが、  ファイルに読取り専用属性を設定したりしても効果ありませんでした。   ですが一つのデータファイルを、複数の人が利用する、 というのは普通にある処理だと思うのですが、 こういうのはどうしたら良いのでしょうか? 根本的にADO接続でいければ万事解決ですが、 この手の処理方法で上手い方法があれば教えてください。 (普通のCSV読取りではなくADOを使っているのは、 SQLの条件指定で処理がかなり簡略化出来る仕様が背景にあります。)

  • インストール: php-ntsにphp5apache2.dllがない

    よろしくお願いします。 PHPには、php-5.3.0-Win32-VC9-x86.zip、php-5.3.0-nts-Win32-VC9-x86.zipがありますが、nts版には何故「php5apache2.dll」が入ってないのでしょうか? httpd.confのLoadModuleでphp5apache2.dllのPATHを設定しますが、php5apache2.dllがないのでTS版から抜きだしてくる必要があります。 しかしNTS版に入れないのは、それなりの理由があると思うのです。 ISAPIを利用しない限りはNTS版インストールを推奨されているようですが、これだけでは理由がわかりません。 何かご存知の方おられましたら、是非 ご教授ください。 (環境)WindowsXP pro SP3、apache2.2.13、PHP 5.3.0 ActivePerl 5.10.1

    • ベストアンサー
    • PHP
  • ページに乗っているコントロールの一覧を取得するコー

    タブコントロールのページに乗っているコントロールの一覧を取得するコードを教えてください。 あくせすです。 1ページ目には、コマンドボタン、テキストボックスが乗っています。 それを取得したいです。 2ページ目には違うコントロールが乗っています。 2ページ目のコントロールは取得したくないです。 http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200911/09110001.txt を参考に、 Sub test() For Each tabctl As TabPage In TabControl1.TabPages For Each ctl As Object In tabctl.Controls If ctl.Name.toString.IndexOf("TextBox") > -1 Then Dim tb As TextBox tb = DirectCast(ctl, TextBox) End If Next Next End Sub にしましたが構文エラーになってしまいました。 VB.NETのコードだからですよね。 VBAのコードをご教授いただけますか。よろしくお願いします。

専門家に質問してみよう