win main – プログラミング – Home

通知
すべてクリア

[解決済] win main


女王
 女王
(@女王)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

猫でもわかるからのコピペですが、
WinMainの引数、HANDLE 型になってますがあってるんでしょうか?
borlandのコンパイラ、bcc developerでは、エラーになります。

#include <windows.h>
#include <time.h>
#include <stdio.h>

int WINAPI WinMain( HANDLE hInstance ,
HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow )
{
int hr, mn, sec, ret;
char str[256];
char *str_org = ただいま%3d時%3d分%3d秒です;
struct tm *mytime;
time_t long_time;

while(1) {
time(&long_time);
mytime = localtime(&long_time);
hr = mytime->tm_hour;
mn = mytime->tm_min;
sec = mytime->tm_sec;
sprintf(str, str_org, hr, mn, sec);

ret = MessageBox(NULL,
(LPCSTR)str,
(LPCSTR)猫でもわかるプログラミング,
MB_OKCANCEL);
if (ret == IDCANCEL)
break;
}
return 0;
}


引用未解決
トピックタグ
joan
 joan
(@joan)
ゲスト
結合: 23年前
投稿: 42
 

VC2003でC++でコンパイルしてみましたが、コンパイルエラーになりました。

> error C2731: 'WinMain' : 関数はオーバーロードできません。
> 'WinMain' の宣言を確認してください。
> 1 番目の引数を 'HANDLE' から 'HINSTANCE' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。

HANDLE のところを HINSTANCE に置き換えないとやっぱりダメじゃないですかね。

Win32APIのリファレンスにも HINSTANCE になってますし。
http://msdn.microsoft.com/library/ja/default.asp?
url=/library/ja/jpwinui/html/_win32_winmain.asp


返信引用
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
 

ハンドルは汎用的でウィンドウハンドル、ファイルハンドル、セマフォもハンドル。
前は、typedefなのでコンパイルエラーにならない。
今は、ミスを減らすために構造体にしてコンパイルエラーを出すように変えた。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> 前は、typedefなのでコンパイルエラーにならない。
> 今は、ミスを減らすために構造体にしてコンパイルエラーを出すように変えた。

一応後方互換のために、windows.hの前にSTRICTマクロがある時に後者になります。

# 猫の時代のコードは、多分この定義がなかったのでしょう。


返信引用
女王
 女王
(@女王)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

どうも!みなさん、参考になりました!
ありがとうございます!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました