• ベストアンサー

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

honiyonの回答

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。  ソースコードは、自分自身、というイメージです。  作成者が、「ソースコード」という形で処理手順等をコンピュータに教えてあげます。 逆に言えば作成者が教えたこと以外は何知りません。  何がいいたいかというと、宣言した関数が、ソースコードの中にあるか、外部(DLL)の中にあるか、というのも作成者が教えてあげるという事です。  暇があれば、LoadLibraryという WinAPI32関数について調べてみてください。その片鱗を見ることが出来ます。  ディレクトリ構成の違うマシンでも何故実行できるか、という点については、PATHという環境変数がカギを握っています。 ディレクトリを指定せずファイルが参照され時、それがカレントに無い場合は自動的に環境変数にかかれているディレクトリの中身を探します。  WinNT系は、DLLを C:\WINNT\SYSTEM32、Win95系は C:\WINDOWS\SYSTEM32に置きますが、どちらのケースでも同一プログラムが動く理由はここにあります。 そのディレクトリを PATHという環境変数に書いているためです。  頭がまわってないのでうまく説明出来ているかちょっと心配ですが...(^^;  参考になれば幸いです(..

noname#1176
質問者

補足

ありがとうございます。 >何がいいたいかというと、宣言した関数が、ソースコードの中にあるか、外部(DLL)の中にあるか、というのも作成者が教えてあげるという事です。 ソースコードの中にあるか外部(dll)にあるか、は ソースコードに記述するんでしょうか。 (C言語のことをご存知なら、「dllにある関数である」ということはどのように書くのか、お教えください。 例えばexternっていうのは、コンパイラに「ソースコードにはないけど、他の目的モジュールにありますよ」と教えるもので、dllに書かれているということを教えるためのものではないですよね。) 別な方法でリンカに教えるのでしょうか。 >暇があれば、LoadLibraryという WinAPI32関数について調べてみてください。 すみません。ひまなときにさせてください。(^^; >ディレクトリを指定せずファイルが参照され時、それがカレントに無い場合は自動的に環境変数にかかれているディレクトリの中身を探します。 >そのディレクトリを PATHという環境変数に書いているためです。 これは、つまり、こういうことですね。 exeは、関数がなんと言う名のdllにあるのか知っているが、そのdllがどのディレクトリにあるのかは知らない。だから、PATHに書かれているディレクトリを探しに行くんだ。 でも、exeは、 関数が「dllにある関数だ」ということは知っていても、「なんと言う名のdllにある関数だ」ということは、なぜ知っているのでしょうか。

関連するQ&A

  • DLLを直接プログラム内に取り込んでEXEファイルを作れますか

    VC++.NETで開発を行う予定ですが、 そのときicmp.dllというDLLを使う予定です。 これに関する説明を読むと、将来サポートされない可能性があるとのことでした。 それで、このDLLをスタティックライブラリをリンクするように、EXE本体のなかに取り込んでおきたいのですが、そのようなことは、出来るのでしょうか。 つまり、icmp.dllのある環境で、exeファイルを作り、 icmp.dllのない環境で、そのexeファイルを実行させたいのですが、そのようなことはできるのでしょうか。

  • exeをdllの様に利用する方法

    以前、どこかのサイトで見たことなので記憶があいまいなのですが、exeファイルもdllの様にリンクして関数を呼び出せるというように記憶しています。 実際、可能なのでしょうか?だとすると具体的にどのように書けばよいのでしょうか。詳しく説明しているサイトやサンプルプログラムなど乗っているサイトがあれば教えてください。 環境はC/C++でVisual Studioです。 よろしくお願いします。

  • 「DLLファイル」とは?

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

  • EXEからDLLへ移植

    以前、下のような質問をさせていただいたものです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1748227 EXE(実行形式)で既にあるプログラムをDLLとして移植したいのですが、うまくいきません。うまくいかない事象は上のページで質問しましてまだ解決しておりません。(ウインドウ内にCreateDialogを用いてダイアログを表示させようとしても表示されない) 実行形式で組まれたプログラム(ソース)をDLLに移植する時の一般的な方法、注意すべきところ、そのままソースを移植してもダメな理由(EXEとDLLの違い)などありましたら教えてください。同じようなことをした経験のある方など、よろしくお願い致します。

  • cygwin1.dll を必要としないCのexeファイルを作りたいです

    はじめまして、shigure2005と申します。 私は普段UNIX上でC言語のプログラムを書いているのですが、 わけあってWindows上で動くようにする必要が出てきました。 そのプログラムをそのままcygwinでコンパイルしたところ コンパイルでき、実行ファイルも問題なく実行できたのですが、 このままですとcygwin1.dllが必要になってしまいます。 ですので、これがなくてもすむような別のコンパイル方法を 教えていただければと思ったしだいです。 過去ログを探って、MinGWについては試してみたのですが、 コンパイルは問題なく通るのに、なぜか実行ファイルを 実行すると、うまく起動できません。Mingwは以下のファイルを ダウンロードしてインストールしました。 mingw-runtime-3.8.tar.gz mingw-utils-0.3.tar.gz MinGW-4.1.1.exe w32api-3.3.tar.gz binutils-2.15.91-20040904-1.tar.gz mingw32-make-3.80.0-3.exe PATHは「C:\mingw/bin;C:\cygwin/bin」の順に通していて、 コマンドプロンプトでコンパイルし、コンパイル後、 コンパイルに用いたdllがcygwin1.dllでないのを確認して います。また、helloworldなど簡単なプログラムなら、 Mingwでもうまくコンパイルできてます。cygwinとMingwで コンパイル性能に大きな差などがあるのでしょうか? また、cygwinだけでも、Mingw-runtimeをインストール すれば、cygwin1.dllを必要としない形式にコンパイル できるという話を聞いたのですが、ご存知の方が いらしたら教えてください。 どうぞよろしくお願いします。

  • EXEを起動するとDLLが見つからないエラー

    VC超初心者です。 あるベンダ提供のdllとヘッダファイル、libファイルすべてそろっています。 DLLを使用するにあたって、宣言を記述せずにlibファイルをインポートしました。 どうにかこうにかコーディングをしました。VisualC++でソースを開いて実行(F5)すると正常に動きました。 しかし、いざEXEファイルを作ってそれを実行すると「DLLが見つかりません」というエラーが出ます。 これはどうすれば回避できますか?

  • 読み込む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

  • PHPでexeファイル実行

    C言語でMPG形式の画像ファイルを読み込み、画像処理をしてテキスト形式で画像データを出力するプログラムを作成したのですが、 これをPHPプログラム内で動作させ、テキストデータ(できればバイナリのほうがいい)を読み取りたいと思います。 これはexeファイルをexecやsystem関数で実行することで解決できるのでしょうか? また、C言語の画像処理プログラムが画像を読み込んでからテキストデータを作成するまで1分ほどのタイムラグがあります。 どうすればPHP内の処理でexeファイル実行→exeがデータベースから画像を読み込む→ 1分処理待ち→テキスト作成→作成されたテキストデータをPHPで読み込み とできるのでしょうか? ちなみに、exeファイルとphpで作成した画像データベースはサーバー機に置くつもりです。 テキストデータを介さなくても、C言語プログラムからphpに直接データを渡す方法があればそちらのほうが望ましいです。 連続投稿で申し訳ないのですが、急を要するのでぜひともご解答お願いします。

    • ベストアンサー
    • PHP
  • C++DLLの明示的リンクに関して

    DLLを明示的リンク(LoadLibraryとGetProcAddressを使用して)で使うとき、C言語では、関数名がそのまま利用できますが、C++では、オーバーロード機能があるため、関数名が変化してしまいます。C++でDLLを明示的リンクで使用するにはどうしたら良いのですか?

  • exeファイル

    最近C言語を始めたのですが 早くも行き詰ってしまいました コンパイラを使って exeファイルを作ったのですが どうすればネット上でそのプログラムを使えるのでしょうか? 拡張子がexeのままだと使えないようなので・・・