• 締切済み

DLLのインポートとエクスポート

Dependency WalkerをつかってEXEが利用している機能を特定しようと思ったのですが、PIとEと二つリストが存在します。 どちらも利用するDLL中の関数なのでしょうか?それとも、片方はそうで片方別のもということなのでしょうか。 Dependency Walkerの詳しい説明の載っているサイトも含めて回答してくださると助かります。 どうぞ よろしくお願いいたします。

みんなの回答

  • z64423
  • ベストアンサー率53% (26/49)
回答No.1

Context Help(ツールバー右端の?アイコン)をクリックして「PI」、「E」をクリックすると説明が表示されますよ。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DLLインポートについて

    A.exe ⇒ B.dllの関数 ⇒ C.dllの関数 の順で関数をコールするのですが、C.dllの関数をコールする際に DllNotFoundExceptionが出てしまいます(「'C.dll' を読み込めませんでした。」) また、上記エラーはPCによって発生しない場合もあるのですが、 原因として何が考えられるでしょうか。 動作確認したPCのフォルダ構成は同じで下記のようになっており、 EXEとDLLはすべて同じフォルダ内に存在しているため原因がよくわかりません。 BIN ├A.exe VB.net ├B.dll VB.net └C.dll C言語

  • 16ビットDLLから32ビットDLLをコールする方法

    現在VC++で「16ビットDLLから32ビットDLLをコール」をしようと思って 調べていましたが、このご質問に頼るしか方法がなく、困っています。 状況  VB4.0(16bit)・・・16bit版でEXEを作成  VC++1.51・・・・・16bitDLLを作成  VC++4.0/6.0・・・・32bitDLLを作成  VB4.0(16bit)のEXEから、16bit版のDLLをコールし処理を行いたいの  ですが、16bit版DLLで扱えないVC++の関数(プロセス関数:spawn??())  を利用しなければならず、16bit版DLLの機能を32bit版DLLで作成し、  16bit版DLLから32bit版DLLを呼び出そうと思っております。 誰か助けて! 是非、皆様のお知恵を拝借致したく思います。

  • QPRO300.DLLって何者?

    ディストリビューションウィザードでインストーラを作成しているのですが、不足ファイルとして「QPRO300.DLL」なるものが一覧に表示されます。 利用しているコントロールは 1、Text70.ocx(InputMan) 2、Number70.ocx(InputMan) 3、SPR32X60.ocx(SPREAD60) 4、CrystalReports ver9.0 の4種類で、そのほか利用しているものとしてはDAOぐらいです。 Dependency Walkerで依存DLLを調べても、各DEPファイルを調べてもQPRO300という文言はどこにも出てきませんでした。 そこで3点ほど質問です。 ・QPRO300.DLLとは何者? ・なぜこのファイルが不足一覧に出てくるのか ・無視して問題ない? 手がかりになるような情報でも構いませんので、ご存知の方がいれば教えてください。

  • exeファイルはどのdllを参照すべきか、知っているのでしょうか。

    dllとは、プログラムが実行時に参照するものですよね。 よく使われる機能があらかじめ作られているものですよね。 私はC言語しか知らないので、C言語でプログラミングすることで話を進めさせてください。 (とは言っても、ごく初歩的なプログラムが組めるだけの素人です。) OSはWindowsということにします。 C言語は、関数の集まりでソースが書かれています。 dllも、中身に関数の実体が記述されている、そういうイメージでしょうか。 私がもっと勉強して、複雑なプログラムを組んだりすると、 「あ、これはdllに実体がある機能だから、いちいち実装を書かなくてもいいんだな」 と考えて、ソースファイル( ~.c )の中でその関数を使うだろうと思います。 私がよくわからないのはここからです。 dllにある関数をソースで使って、無事コンパイルして、さあリンクしてexeを作りましょう、 というときに、リンカ(リンクを行うプログラム)は、 「そんな関数、実体がないぞ」 って文句を言ってこないのでしょうか。 いや、リンカは、dllに実体がある関数だということを知っているはず。 でもそれって、いちいち 「この関数はどこどこにある ○○.dll というdllに書いてあります」 というふうに、リンカに教えてあげなくてはいけないのでしょうか。 (それってまさか、ソースに書くわけじゃないですよね? ) それから、 exeファイルっていうのは「この機能はdllに行わせる機能だ」ということを知っているのでしょうか。 dllに行わせる機能だということを知っているとしても、 どのディレクトリにある なんと言う名のdllに その機能が書かれていることまで知っているのでしょうか。 (でもそこまで知っていたら逆に、ディレクトリ構成の違うマシンでは実行できなくなってしまうし。) そういうような原理的なことを教えてください。

  • dll作成

    Visual studio2012利用し、 Win32プロジェクト から DLLを選んで、テンプレートに、関数を記入。ヘッダファイルを追加し、そこに関数の宣言を書いた。 ビルドすると、Debugフォルダに.dllは作成され、exeファイルが作成されない。 デバックなしで開始するとdllは開始できません。とメッセージがでます。 作成されたdllファイルの開始の仕方を、教えてください。

  • VC2005のDLL明示的リンク

    VC2005のDLL明示的リンクについて質問です。 <前提> DLLファイルに宣言されている関数(Export関数)が、 4ファンクションあるとします。そのDLLファイルを、 Dependency Walkerで確認すると、以下のようになります。 --------------------------- 関数名 エントリポイント --------------------------- add1 0x00001010 sub2 0x00001030 mul3 0x00001060 div4 0x00001090 <質問> このDLLファイルがexeファイルからLoadLibraryで 読み込まれた場合、プロセスメモリ上には、 上記のエントリポイントの順番で必ず配置されるのでしょうか? 補足ですが、この時、プロセスメモリ上にロードされる位置 は、気にしていません(ベースアドレスは変わることがあるのは認識しています)。 要は、エントリポイントの順番が変わったりしないかを、知りたいです。 <プロセスメモリ上に、エントリポイント順に配置されたイメージ> 0000_0000h --------------------------- (略) --------------------------- add1 --------------------------- sub2 --------------------------- mul3 --------------------------- div4 --------------------------- (略) --------------------------- FFFF_FFFFh <プロセスメモリ上に、エントリポイント順に配置されなかったイメージ> 0000_0000h --------------------------- (略) --------------------------- sub2 --------------------------- add1 --------------------------- div4 --------------------------- mul3 --------------------------- (略) --------------------------- FFFF_FFFFh それとも、こんな感じで、OS依存(実行環境依存)で、色々な配置に なるのでしょうか?

  • C++ のDLLがdelphiで読めない

    VisualStudio2010C++で作ったDLLをdelphiで利用したいのですが、「エントリポイントが 見つかりません」といわれてしまいます。チュートリアルのサンプルそのままで試して見ましたが、VS2010 付属のdumpbin .exe でdllの中身を見るとエントリポイントが @ILT+345?Add@MyMathFuncs@MathFuncs@@QAGNNN@Z)みたいな、元の関数名はどうした? と思えるような名前です。 defファイルを使って見ましたが、今度は 1 0 0001115E Add = @ILT+345(?Add@MyMathFuncs@MathFuncs@@QAGNNN@Z) みたいな表示でやはりdelphiから読めません。__stdcall にはしています。 VC++で読み込めばちゃんと読めるのである意味正しく作られているのだと思いますが、他のOpenNI , OpenGL などのdllをdumpbin /exports で覗くと、整然と関数名が並び、 これなら読めるだろうと思えますし、実際にdelphiでも使えます。 他の言語ですっきり関数名で呼び出せる(普通の)DLLを作るにはどうすれば良いのでしょうか。 VisualStudioで作ったDLLは呼ぶ側があの記号のような名前で呼べということなのでしょうか?

  • 「DLLファイル」とは?

    DLLファイルについて、よく分かりません。 たまにPHPなどでプログラムを組む時に、拡張ライブラリとして.dllファイルをextディレクトリに入れたりするのですが、本来DLLファイルはどのプログラミング言語からでも呼び出せるものなのでしょうか?(↓の説明を読むと、そんな気がしてしまうのですが)それとも、特定の言語のライブラリなどをdllと呼ぶようなイメージでよいのでしょうか?それとも、ぜんぜん別のものなのでしょうか? http://e-words.jp/w/DLL.html

  • VB2005で作成したDLLの呼び出し方

    はじめまして、VB2005(.NET)初心者です。 現在、各プログラムを実行するためのメニュー プログラムを作成しています。 .net以前では、各プログラムをEXEで作成し API関数を利用し、メニューより実行させて いましたが、今回、各プログラムをEXEではなく dllで作成し実行する方法で作ることになりました。 各プログラムのdllを実行する方法がわかりません。 参考書等みてみましたが、見当たりません。 どのようにしていらっしゃるか教えて下さい。 宜しくお願いいたします。

  • 違うディレクトリに存在するDLLを読みたい

    Visual Basic 2005で開発を行っています。 開発の時点では参照設定よりDLLを読み込んでいるので問題ないのですが、 リリース時に問題があって困っています。 例えば ・購入したAソフトウェア(a.dll)が存在する。 ・開発したBソフトウェア(b.exeとb.dll)が存在する。 ・Bソフトウェアのb.exeは、Bソフトウェアのb.dllを利用しており、  Bソフトウェアのb.dllは、Aソフトウェアのa.dllを利用している。 ・AソフトウェアとBソフトウェアのインストールタイミングは別である。 ・Aソフトウェアがインストールされた先はC:\Program Files\A_Software\a.dllである。 ・Bソフトウェアがインストールされた先はC:\Program Files\B_Software\b.exe(b.dll)である。 このような場合に、b.exeはb.dllを解決することが出来ますが、 b.dllはa.dllを解決することが出来ません。 また、a.dllはデフォルトインストール先はありますが、Bソフトウェアと インストールタイミングも別な為、どこにインストールされてくるか 分かりません。 その為、アプリケーション構成ファイルに参照パスなるものを指定して おくことも出来ません。 こういった場合、Bソフトウェアをインストール後に、Aソフトウェアのインストール先から a.dllをBソフトウェアのインストール先へコピーするなどという手動的作業が 必要になるのでしょうか? インストーラーを作成する場合にa.dllを含めてしまうとライセンスが 問題になることが多いと思います。 Microsoft Visual J# 2.0 再頒布可能パッケージ http://www.microsoft.com/downloads/details.aspx?FamilyID=f72c74b3-ed0e-4af8-ae63-2f0e42501be1&displaylang=ja これに関しても、インストールは出来てもアプリケーションから参照 出来ないというのではお話にならないと思うのですが、 どうやって解決しているのでしょうか? 宜しくお願い致します。