今回、始めてこの掲示板を使わせてもらいます。
過去の投稿を検索しても見つからなかったので質問させてもらいます。
ファイル名 : test.cpp
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
return 0;
}
上記のコードをコードをコマンドプロンプトで「bcc32 test.cpp」でコンパイルしようとすると
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
警告 W8057 test.cpp 10: パラメータ 'hInstance' は一度も使用されない(関数 __stdca
ll WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
警告 W8057 test.cpp 10: パラメータ 'hPrevInstance' は一度も使用されない(関数 __s
tdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
警告 W8057 test.cpp 10: パラメータ 'lpCmdLine' は一度も使用されない(関数 __stdca
ll WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
警告 W8057 test.cpp 10: パラメータ 'nCmdShow' は一度も使用されない(関数 __stdcal
l WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
と出てコンパイルができません。
このコードはWindows APIを使ってみようという事で組んだコードです。
4つの警告の意味はなんとなく分かるのですが、エラーがなぜ出るのかが分かりません。
私はWindows APIを使う場合はアプリケーションエントリポイントがWinMain関数によって定められるので、main関数がなくても大丈夫だと思ったのですがご覧の通りうまくいきませんでした。
初心者の質問ですが、エラーの原因を教えてもらいたいです。
Windows APIのコンパイルエラーについて
Re: Windows APIのコンパイルエラーについて
今、BCCを試せる環境がないので確認は取っていませんが
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
ということはコンソールアプリケーションとしてコンパイルしようとしているからではないかと
コンパイルオプションに-tWEをつければGUIアプリとしてコンパイルできるんじゃなかったかな?
つまりこういう感じでいけたような気がします。
bcc32 -tWE test.cpp
[追記]
もしかするとこちらでいけるかもしれません。
bcc32 -W test.cpp
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
ということはコンソールアプリケーションとしてコンパイルしようとしているからではないかと
コンパイルオプションに-tWEをつければGUIアプリとしてコンパイルできるんじゃなかったかな?
つまりこういう感じでいけたような気がします。
bcc32 -tWE test.cpp
[追記]
もしかするとこちらでいけるかもしれません。
bcc32 -W test.cpp
Re: Windows APIのコンパイルエラーについて
沖さん返信ありがとうございます。
早速試してみたところ、どちらでもコンパイルをすることができました。
今後、どちらでコンパイルしても問題ありませんか。
早速試してみたところ、どちらでもコンパイルをすることができました。
今後、どちらでコンパイルしても問題ありませんか。
Re: Windows APIのコンパイルエラーについて
先ほど回答についてですが、-tWEというオプション指定は古い形式のオプションで下位互換で残されているものと思われます
そのため、bcc32 -W test.cppのほうを使用したほうが良いかもしれません。
またその他のコンパイルオプションについては、googleで「gcc コンパイル オプション」「bcc コンパイル オプション」で検索すれば色々ページが引っかかりますので
古い情報もありますけども参考にはなると思います。
[追記]
今後の参考によく使いそうなコンパイルオプションについて
-W
Windows GUIアプリケーションとしてコンパイル
エントリポイントはWinMain関数
-WC
デフォルトオプション、何も指定していない場合はこれになっている
コンソールアプリケーションとしてコンパイル
エントリポイントはmain関数
-WD
DLLを作成
-WM
マルチスレッドプログラムの作成
単独指定は不可、基本的には-Wや-WDと一緒に使う
と、こんな感じでしょうか。最低限、上の2つを覚えておけばmainが見つからないとかWinMainが見つからないというエラーが出た場合に対処できるでしょう。
あと、念のため、もし問題が解決されていましたら、解決にチェックをお願い致します。
[hr]
検索キーワードに誤りがあったため修正しました
一部情報追記
そのため、bcc32 -W test.cppのほうを使用したほうが良いかもしれません。
またその他のコンパイルオプションについては、googleで「gcc コンパイル オプション」「bcc コンパイル オプション」で検索すれば色々ページが引っかかりますので
古い情報もありますけども参考にはなると思います。
[追記]
今後の参考によく使いそうなコンパイルオプションについて
-W
Windows GUIアプリケーションとしてコンパイル
エントリポイントはWinMain関数
-WC
デフォルトオプション、何も指定していない場合はこれになっている
コンソールアプリケーションとしてコンパイル
エントリポイントはmain関数
-WD
DLLを作成
-WM
マルチスレッドプログラムの作成
単独指定は不可、基本的には-Wや-WDと一緒に使う
と、こんな感じでしょうか。最低限、上の2つを覚えておけばmainが見つからないとかWinMainが見つからないというエラーが出た場合に対処できるでしょう。
あと、念のため、もし問題が解決されていましたら、解決にチェックをお願い致します。
[hr]
検索キーワードに誤りがあったため修正しました
一部情報追記