いつもお世話になっております。DLLでincludeしたものはexeでもincludeしなければならないのか疑問に思っています。
例えば、
DLL側である関数abc()内でWindowsMessage()を使用するために#include<windows.h>とインクルードした場合。
Exe側では関数abc()を使用するためにwindouw.hをインクルードしなければならないのでしょうか。
試してみた所、インクルードしなくてもうまくいったのですがたまたま何かしらでうまくいっていただけかもと不安に思ったので、一般的にはどうなのかと思い質問させていただきました。
No.2ベストアンサー
- 回答日時:
「関数を呼んだら、呼んだ先の事は知らない」のがCやC++の良い所でもあり、悪い所でもあります。
以下のような「単純な例」で考えれば「インクルードは不要」だと判るでしょう。
【main.c】
void sub(void);/*sub()が何者なのかを宣言しておく*/
int main(void)
{
sub();
}
【sub.c】
#include <stdio.h>/*printf()を使うので必要*/
void sub(void)
{
printf("Hello world\n");
}
main.cで「printfを使うsub()を呼ぶから、main.cでも#include <stdio.h>が必要」とは思わないですよね。
「main.cはsub()を呼ぶだけだから、sub()の宣言だけする。sub()の中で何を呼ぼうが、そんな事は知ったこっちゃない」ので、main.cでは「一切、何のヘッダーもインクルードする必要はない」のです。
exeからDLLを呼ぶ時も同様で「exeはDLLの入り口さえ知ってれば良い」ので「DLLの中で何を使われていようが知ったこっちゃない」でOKなのです。
No.1
- 回答日時:
*.hの内容によりますが、原理的には不要です。
一般にヘッダーの内容は「目論見(もくろみ)」なのであって
オブジェクトのリンクには深いかかわりはありません。
穏便な例としては、一般にDLL内部で使用される
公開されない関数もヘッダーでプロトタイプされますが、
これらの定義はEXE側に公開されません。つまりこのヘッダー
は使用できませんし、その必要もありません。
極端な例では、DLLをアセンブラのみで作成した場合、
DLL側では、そもそもC言語用のヘッダーは使用できません。
EXE側はDLLの公開関数の仕様をもらって、自分でヘッダー
を書く必要が出るでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- その他(セキュリティ) 役所など、情報系システムのセキュリティが弱くても業務システムに問題ないか 3 2022/11/02 16:38
- HTML・CSS インクルードした要素がヘッダーにかぶってしまう 3 2022/09/13 17:35
- その他(OS) OBSが起動できません 3 2022/03/30 12:21
- アプリ アプリケーションが見つかりません 2 2022/07/13 21:07
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- その他(セキュリティ) exeファイルの個人情報について 3 2023/06/29 17:36
- その他(IT・Webサービス) エクセルの実行ファイルについての質問です。 1 2023/05/04 03:58
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pthread_cond_waitとptherad_co...
-
VBA public変数はどのようなこ...
-
GetNextWindowがDLLファイルUse...
-
プロシージャをまたいて変数を...
-
VB6.0の正規表現を使って、文字...
-
【VB6.0】 あるフォームから他...
-
C#のループでtextboxに値を入れ...
-
二点の座標から距離や角度を求...
-
VB.NETでのイベントの途中終了
-
エクセルVBAでテキストボッ...
-
C言語のサフィックスについて
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
-
VC++ (byte)(col & 0xFF) の意味
-
Pythonでのstrip()とsplit()の...
-
perlによるxmlファイルの取得
-
sublimit textっていうエディタ...
-
レコードセットにnullの場合
-
C言語で10行10列の行列式の値を...
-
タイムアウトする仕組みを作りたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA public変数はどのようなこ...
-
演奏記号の・・・・
-
GetNextWindowがDLLファイルUse...
-
VB6.0の正規表現を使って、文字...
-
マクロ 条件式
-
Excel VBA: private sub 内の...
-
VBA 再帰について
-
フォルダ内にさらにフォルダが...
-
プロキシでキャッシュされる/...
-
上付文字と下付文字について(D...
-
分割コンパイルの方法がわかり...
-
プロシージャをまたいて変数を...
-
ファイルパスの変換方法
-
slapd再起動時にエラー
-
sub-paragraphとsub-sub-paragraph
-
pthread_cond_waitとptherad_co...
-
三項でたとえば交換って
-
C#のループでtextboxに値を入れ...
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
おすすめ情報