- ベストアンサー
exeファイルはどのdllを参照すべきか、知っているのでしょうか。
BLACKTALONの回答
どちらも、ダイナミックリンクというのだと思うのですが、そのリンク方法の中に、スタティックな方法(hとLIBを用いる方法)とダイナミックな方法(LoadLibrary()とGetProcAddress()を使う方法)とがあるという・・・まさしく訳が分かんないんですけど、とにかく、DLLのリンク方法には大きく分けて2種類有るんです。(^^; >「○○.dllが見つからない」というエラーですね。 その通りです。 >「コード内にDLLファイル名を記述する必要があるわけです」というのは、.LIBを作るときの話ですよね? >要するにソース中に"C:\\exsample\\exsample.DLL"みたいに直接書いてあったらそこを探しに行くということでしょう(たぶん)。 いわゆるダイナミックなリンク方法のとき、3番の回答者のおっしゃるとおり、LoadLibraryの引数にはDLLファイル名を指定する必要があると言うことです。 このとき、フルパスでもパス無しでも指定できますが、パス無しの時は2番の参考URLに書いて有るとおりの検索順序でDLLを探しに行きます。 LIBをつくるにはlibというVC++のツールを使うか、Borlandのimplibというツールで作れるようです。 ダイナミックリンクのメカニズムの説明が不足していましたね。3番の方ありがとうございます。質問者には混乱させてすみませんでした(^^;
関連するQ&A
- DLLを直接プログラム内に取り込んでEXEファイルを作れますか
VC++.NETで開発を行う予定ですが、 そのときicmp.dllというDLLを使う予定です。 これに関する説明を読むと、将来サポートされない可能性があるとのことでした。 それで、このDLLをスタティックライブラリをリンクするように、EXE本体のなかに取り込んでおきたいのですが、そのようなことは、出来るのでしょうか。 つまり、icmp.dllのある環境で、exeファイルを作り、 icmp.dllのない環境で、そのexeファイルを実行させたいのですが、そのようなことはできるのでしょうか。
- ベストアンサー
- C・C++・C#
- exeをdllの様に利用する方法
以前、どこかのサイトで見たことなので記憶があいまいなのですが、exeファイルもdllの様にリンクして関数を呼び出せるというように記憶しています。 実際、可能なのでしょうか?だとすると具体的にどのように書けばよいのでしょうか。詳しく説明しているサイトやサンプルプログラムなど乗っているサイトがあれば教えてください。 環境はC/C++でVisual Studioです。 よろしくお願いします。
- 締切済み
- C・C++・C#
- 「DLLファイル」とは?
DLLファイルについて、よく分かりません。 たまにPHPなどでプログラムを組む時に、拡張ライブラリとして.dllファイルをextディレクトリに入れたりするのですが、本来DLLファイルはどのプログラミング言語からでも呼び出せるものなのでしょうか?(↓の説明を読むと、そんな気がしてしまうのですが)それとも、特定の言語のライブラリなどをdllと呼ぶようなイメージでよいのでしょうか?それとも、ぜんぜん別のものなのでしょうか? http://e-words.jp/w/DLL.html
- ベストアンサー
- Windows系OS
- EXEからDLLへ移植
以前、下のような質問をさせていただいたものです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1748227 EXE(実行形式)で既にあるプログラムをDLLとして移植したいのですが、うまくいきません。うまくいかない事象は上のページで質問しましてまだ解決しておりません。(ウインドウ内にCreateDialogを用いてダイアログを表示させようとしても表示されない) 実行形式で組まれたプログラム(ソース)をDLLに移植する時の一般的な方法、注意すべきところ、そのままソースを移植してもダメな理由(EXEとDLLの違い)などありましたら教えてください。同じようなことをした経験のある方など、よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- 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を必要としない形式にコンパイル できるという話を聞いたのですが、ご存知の方が いらしたら教えてください。 どうぞよろしくお願いします。
- ベストアンサー
- C・C++・C#
- EXEを起動するとDLLが見つからないエラー
VC超初心者です。 あるベンダ提供のdllとヘッダファイル、libファイルすべてそろっています。 DLLを使用するにあたって、宣言を記述せずにlibファイルをインポートしました。 どうにかこうにかコーディングをしました。VisualC++でソースを開いて実行(F5)すると正常に動きました。 しかし、いざEXEファイルを作ってそれを実行すると「DLLが見つかりません」というエラーが出ます。 これはどうすれば回避できますか?
- ベストアンサー
- C・C++・C#
- 読み込む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
- 締切済み
- C・C++・C#
- 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を明示的リンクで使用するにはどうしたら良いのですか?
- ベストアンサー
- C・C++・C#
補足
わかりました。ダイナミックリンクには、スタティックな方法とダイナミックな方法の二つがあるんですね。 すっきりとしました。 >いわゆるダイナミックなリンク方法のとき、3番の回答者のおっしゃるとおり、LoadLibraryの引数にはDLLファイル名を指定する必要があると言うことです。 わかりました。ダイナミックな方法のときには、DLLファイル名はソースコード中に書かなければいけない、ということですね。 なんだか、難しそうな、ダイナミックな方法のほうが良くわかってきました。 スタティックな方法のほうですが、突っ込んでいいですか。(^^; .LIBファイル中にDLLファイル名が記述されていてそれがリンク時に参照されるから、実行ファイルは、実行時になんという名のDLLを見に行くか、判断できる。 しかし、リンク時になんという名の.LIBファイルを参照すればよいのか、そしてそれはどこにあるのかは、リンクをするプログラム(リンカ)が知っていなければいけないですよね。 .LIBファイル名とそのパスはどのように教えるのでしょうか。 (私が今このサイトを見ているパソコンでは、.LIBファイルなんて2つしかないですが、開発環境のあるマシンではいくつも.LIBファイルがあるんですよね。) (回答#2より) >参考URLのLoadLibrary()のヘルプにもLoadLibrary()自体がどのDLLに記述されていてどのLIBをリンクし、どのヘッダをインクルードすればよいかが最後に書いてあります(ただし、VC++はほとんど自動でやってくれますけどね)。 VC++が自動的にやるということですが、リンク時マシンじゅうの.LIBファイルを片っ端から見に行くのでしょうか。(パスくらいは指定するんですよね? それはソースコード中に書くのではないですよね。) (すみません。しつこい奴だなどと気を悪くなさいませんように。) あと当然のことかもしれませんが、確認させてください。.LIBファイルというのはリンク時に参照されるものなので、実行時にはなくてもいいんですよね?