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' 型への変換には明示的なキャストが必要です。
またまとわりつく猫のサンプルも一箇所だけ直さないと
コンパイルできませんでした。(こちらは解決済みです)
プリプロセッサでSTRICTを定義していませんか?
ToolAdressはFARPROC型ではなくWNDPROC型であるべきで,
また,STRICTを定義していると,
GetStockObjectはHGDIOBJECTを返すために,
C++ではstatic_castで目的の型にキャストする必要が出てきます。
ちなみに,VC++ 6.0ではSTRICT状態がデフォルトで,
以前の状態にするにはNOSTRICTを定義したりします。
GetStockObjectの方はコメント行にしてもエラーも出さなかったので
コメント行にしました。またFARPROCの部分はWNDPROCに変更してみたら
ちゃんと動きました。本当にありがとうございました。
> GetStockObjectの方はコメント行にしてもエラーも出さなかったのでコメント行にしました。
だからstatic_castでGBRUSHにキャストしてやればいいのですよ。
まっ,ウィンドウクラスでGetStockObject使うとそのウィンドウが浮く可能性があるので,
static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
ではなく,
reinterpret_cast<GBRUSH>(COLOR_WINDOW + 1);
を使うべきです。
ツイート | ![]() |