いつもお世話になっております。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ランキング
-
VBA public変数はどのようなこ...
-
VBA 再帰について
-
GetNextWindowがDLLファイルUse...
-
C#のループでtextboxに値を入れ...
-
C言語のサフィックスについて
-
三項でたとえば交換って
-
VB.NETでのイベントの途中終了
-
プログラムの素朴な質問です 分...
-
comboboxのクリックイベントに...
-
VBスクリプトでファイルのコピ...
-
sublimit textっていうエディタ...
-
ClickとChangeイベントの違いは...
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
チェックボックスを操作できな...
-
レコードセットにnullの場合
-
VB.NET)コンボボックスの連動に...
-
他のフォームから別のフォーム...
-
Excel VBAでsub,dimは何の略?
-
ExcelのVBAで文章にある複数の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA public変数はどのようなこ...
-
GetNextWindowがDLLファイルUse...
-
VB6.0の正規表現を使って、文字...
-
Excel VBA: private sub 内の...
-
演奏記号の・・・・
-
上付文字と下付文字について(D...
-
pthread_cond_waitとptherad_co...
-
プロシージャをまたいて変数を...
-
2項定理
-
slapd再起動時にエラー
-
sub-paragraphとsub-sub-paragraph
-
分割コンパイルの方法がわかり...
-
sublimit textっていうエディタ...
-
エクセルVBAでテキストボッ...
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
-
Functionの戻り値を配列にした...
-
C#のループでtextboxに値を入れ...
-
チェックボックスを操作できな...
-
レコードセットにnullの場合
おすすめ情報