2017-08-27 17 views
6

HWNDからプロパティを取得しようとしています。私はUsing Window Propertiesの情報を使用していますが、下の例は私のために働いていません。コードをコンパイルするときにエラーが発生します。Enum HWNDプロパティC++

型の引数 "BOOL(__stdcall *)(HWND hwndSubclass、LPCSTR lpszStringは、HDATAをHANDLE)" タイプのパラメータと互換性がありません "PROPENUMPROCEXW"

ここに私のコールバック関数は

BOOL CALLBACK PropEnumProcEx(HWND hwndSubclass, LPCSTR lpszString, HANDLE hData) { 
    return TRUE; 
} 
です

と、この私がそれを

EnumPropsEx(hwnd, PropEnumProcEx, NULL); 

んを使用していますか誰かがこれをどのように修正できるかについての提案はありますか?

+0

。わかりますか? –

答えて

4

LPCSTR lpszStringは、LPTSTR lpszStringである必要があります。この引数は、ANSIまたはUnicodeのNULLで終了する文字列へのポインタを受け入れる必要があります。 PROPENUMPROCEXWは、Unicodeアプリケーションを構築していることを示します。マクロはEnumPropsExWコールに展開されるため、ワイド文字列を引数として受け入れるコールバックを提供する必要があります。通常、API関数のUnicodeバリアントを明示的に呼び出す必要があります。

また、最後の引数ULONG_PTR dwDataがありません。

だからあなたのコールバックは、次のようになります。エラーメッセージが明確になることができませんでした

BOOL CALLBACK 
PropEnumProcEx(HWND hwndSubclass, LPTSTR lpszString, HANDLE hData, ULONG_PTR dwData) 
{ 
    return TRUE; 
} 
+2

** - 1 ** "' 'LPCSTR lpszString'は' 'LPTSTR lpszString''でなければなりません。" 'T'マクロは1995年から2000年までの間に時間がありました。2000年には、マクロを廃止するためにUnicodeのためのレイヤーを取得しました。現在、私たちのツールは、Windows 9xシステムの実行可能ファイルを生成することさえできません。レガシーでないコードでも引き続き使用することは狂気です。 –

+0

@ Cheersandhth.-Alfこのコードは、ANSIバリアントでも構築されているはずです。私の答えには、UnicodeのAPI呼び出しの使用を推奨する提案が含まれています。 – VTT

+1

@VTT:ANSIとしてビルドすることはお勧めしません。いくつかの読者が真剣にあなたを連れてくるかもしれません。そして、あなたはそれらのために問題を作ります。不正行為を認めなさい。答えを修正してください。 –