Win32API集のMINIがコンパイル出来ないのは?

解決


みけにゃん  URL  2002-09-27 12:28:03  No: 50416  IP: [192.*.*.*]

VC用のWin32APIの中に収録されているランチャプログラムの
ソースをVisualC++5.0でコンパイル(ビルド)したのですが
以下の2つの文でエラーが発生してしまいコンパイル
できないのですがこれはどうしてでしょうか?

C:\Program Files\DevStudio\MyProjects\mini\mini.cpp(431) : error C2664: 'CallWindowProcA' : 1 番目の引数を 'int (__stdcall *)(void)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換できません。 (新しい機能 ; ヘルプを参照
)

c:\program files\devstudio\myprojects\mini\sub.cpp(53) : error C2440: '=' : 'void *' から 'struct HBRUSH__ *' に変換することはできません。(新しい動作 ; ヘルプを参照)
        'void*' から非 'void' 型への変換には明示的なキャストが必要です。

またまとわりつく猫のサンプルも一箇所だけ直さないと
コンパイルできませんでした。(こちらは解決済みです)

編集 削除
YuO  2002-09-27 15:26:24  No: 50417  IP: [192.*.*.*]

プリプロセッサでSTRICTを定義していませんか?

ToolAdressはFARPROC型ではなくWNDPROC型であるべきで,
また,STRICTを定義していると,
GetStockObjectはHGDIOBJECTを返すために,
C++ではstatic_castで目的の型にキャストする必要が出てきます。

ちなみに,VC++ 6.0ではSTRICT状態がデフォルトで,
以前の状態にするにはNOSTRICTを定義したりします。

編集 削除
みけにゃん  URL  2002-09-30 12:03:23  No: 50418  IP: [192.*.*.*]

GetStockObjectの方はコメント行にしてもエラーも出さなかったので
コメント行にしました。またFARPROCの部分はWNDPROCに変更してみたら
ちゃんと動きました。本当にありがとうございました。

編集 削除
YuO  2002-09-30 21:12:43  No: 50419  IP: [192.*.*.*]

> GetStockObjectの方はコメント行にしてもエラーも出さなかったのでコメント行にしました。

だからstatic_castでGBRUSHにキャストしてやればいいのですよ。

まっ,ウィンドウクラスでGetStockObject使うとそのウィンドウが浮く可能性があるので,
static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
ではなく,
reinterpret_cast<GBRUSH>(COLOR_WINDOW + 1);
を使うべきです。

編集 削除