こんにちは。
自分は、今、RegisterClassExでWNDCLASSEX構造体を使い、ウィンドウの登録を行っているのですが
戻り値が0でないにも関わらず、その後のGetLastErrorで値が2になっています。
以下がソースコードです。
DWORD last;
// ウィンドウクラス登録
wcx.cbSize = sizeof(WNDCLASSEX);
wcx.style = 0;
wcx.lpfnWndProc = WndProc;
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0;
wcx.hInstance = hInstance;
wcx.hIcon = (HICON)::LoadImage(hInstance,MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON,0,0,LR_DEFAULTSIZE);
wcx.hCursor = ::LoadCursor(NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH)::GetStockObject(BLACK_BRUSH);
wcx.lpszClassName = WindowClassName;
wcx.lpszMenuName = NULL;
wcx.hIconSm = wcx.hIcon;
if(::RegisterClassEx(&wcx) == 0)
{
return FALSE;
}
last = GetLastError();// 値が2
どうしてエラーでないのに値が2になるのでしょうか?
値が2だと、指定したファイルが見つからないとでますがどうなんでしょうか?
No.2ベストアンサー
- 回答日時:
Windows XP ( Windows 7 の XP モード ) で試してみました。
今まで、戻り値が正常終了を示す値の時はエラーコードなんて気にしてませんでしたから気がつきませんでしたが、確かに RegisterClassEx の後ではエラーコードが 2 になりました。
しかし、ウィンドウは問題なく生成されますし、Spy++ で見てみてもウィンドウクラス名が正しく登録されていましたので、問題はないのではないかと思います。エラーコードが 2 になるのが間違いで、RegisterClassEx の戻り値を信じればよいのではないかと思います。
ちなみに、Windows 7 ( 64 bit ) だと、RegisterClassEx の後ではエラーコードは 0 になりました。
この回答への補足
検証ついでなんでしょうが、もうひとつお聞きしたいのがWNDCLASSEXをつかって設定をしてる最中にプログラムが強制終了するということは聞いたことがないでしょうか?
RegisterClassExで登録する前の構造体に代入する部分で、アイコン読み込みとかで落ちるんです。
検証ありがとうございます。
Windows XP (32bit)版だと、エラー値2になるんですよね。
でも確かにこっちでも正常に動かせます。
値が2だと指定されたファイルが見つかりませんですし。
なんでRegisterClassつかって指定されたファイルが無いって言われるのか
さっぱり分かりませんでした。
こういったエラーのせいなのか何故かRegisterClassExに行くまでにウィンドウの設定のところで落ちる?ような状況になってるPCがあったりなぞです。
No.1
- 回答日時:
RegisterClassEx より前にどこかでエラーが出ているんじゃないでしょうか。
http://msdn.microsoft.com/ja-jp/library/cc428944 …
を見ると、「特定の関数は成功したときに SetLastError(0) を呼び出して、直前に失敗した関数が設定したエラーコードを消去してしまうからです。」と書かれていますから、全ての関数が成功したときにエラーコードをクリアしてしまうわけではないのでしょう。
RegisterClassEx を呼び出す前に
SetLastError(0);
を入れて試してみると良いかもしれないですね。
この回答への補足
指摘された通りに
wcx.hIconSm = wcx.hIcon;
SetLastError(0) // 0クリア
if(::RegisterClassEx(&wcx) == 0)
{
return FALSE;
}
last = GetLastError();// 値が2
SetLastErrorを挿入してみたんですが、変化はなく、やはりRegisterClassEX
でエラーが出ているようです。
回答ありがとうございます。
指摘されて、修正してみたところエラー箇所が一箇所減りました。
しかし、RegisterClassExだけはやはりだめなようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の取得
-
VBで電卓のメモリー機能はどの...
-
テキストボックスのvalueとtext...
-
C言語 1から20までの逆数の和を...
-
Powershellのparamについて
-
ハッシュテーブル(連想配列)が...
-
fscanfでC言語の空欄を読んだ場...
-
Excel VBA 複数選択したリスト...
-
VBA ドロップダウンリストを残...
-
[VBA]選択範囲の下から上に処理...
-
ISDBNULLをスルーしてDBNULLが...
-
VB.NETでコンボボックスの1行目...
-
PysimpleGUIでデータベースを作る
-
VB.NETでアクティブなformを知...
-
VBAでメッセージボックスにセル...
-
ユーザーフォームのテキストボ...
-
power BI クエリエディター 〇...
-
エクセルVBAでコンボボックスの...
-
AccessVBA 帳票フォームの非連...
-
[VB.net] DataGridViewのコンボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
変数名の取得
-
値を返さないコード パス
-
Excel VBAのリストボックスの値...
-
VB初心者。小数点以下の表示で...
-
ハッシュテーブル(連想配列)が...
-
textboxとLabelを動的に変更する
-
PL/SQLでのTO_DATEの時間取得に...
-
VB.NETでアクティブなformを知...
-
Excel vba ユーザーフォームテ...
-
DataTableに対するLINQについて
-
マクロで奇数と偶数の値を2か所...
-
【C++/CLI.NET】コンボボックス...
-
[VBA]選択範囲の下から上に処理...
-
変数に代入してある数値を表示...
-
vbscriptを使いexcelを参照して...
-
範囲が指定されている乱数について
-
[VB.net] DataGridViewのコンボ...
おすすめ情報