猫でもわかるからのコピペですが、
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;
}
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
ハンドルは汎用的でウィンドウハンドル、ファイルハンドル、セマフォもハンドル。
前は、typedefなのでコンパイルエラーにならない。
今は、ミスを減らすために構造体にしてコンパイルエラーを出すように変えた。
> 前は、typedefなのでコンパイルエラーにならない。
> 今は、ミスを減らすために構造体にしてコンパイルエラーを出すように変えた。
一応後方互換のために、windows.hの前にSTRICTマクロがある時に後者になります。
# 猫の時代のコードは、多分この定義がなかったのでしょう。
どうも!みなさん、参考になりました!
ありがとうございます!