3

listbox.Addstring();かかるMFCアプリケーションで使用しようとしていますLPCTSTRchar33 文字の長さの配列の変数を渡しています。

ListBox.AddString(Adapter_List->pScanList->network[0].szSsid);

SzSsidとして宣言されていますchar szSsid[33];

私は2つの問題に直面しています:

1)LPCTSTR likeに型キャストした場合

ListBox.AddString( (LPCTSTR ) Adapter_List->pScanList->network[0].szSsid );

正しい出力が得られません - いくつかの漢字が表示されています。ユニコードの問題であることは知っていますが、ユニコードについては詳しくありません。

2)型キャストしないと、エラーが発生します

char[33] を LPCTSTR に変換できません

すべてのアクセス ポイントを表示する MFC アプリケーションを構築しようとしています。でszSsidアクセス ポイント名を確認できます。

4

1 に答える 1

4

LPCTSTR型キャストは間違っています。文字列から( ) 文字列への変換、または文字列から Unicode UTF-16文字列への変換など、 ATL 変換ヘルパーを使用することができます。例えば:CA2TcharTCHARLPCTSTRCA2Wcharwchar_t

// CA2T - Uses the TCHAR model (obsolete)
ListBox.AddString( CA2T(Adapter_List->pScanList->network[0].szSsid) );

また:

// CA2W - Conversion to Unicode UTF-16 (wchar_t) string
// More modern approach.
ListBox.AddString( CA2W(Adapter_List->pScanList->network[0].szSsid) );

しかし、もっと重要なのは、文字列で使用されているエンコーディングは何ですか? メソッドに渡される Unicode UTF-16 文字列に適切に変換するためchar szSSid[]に、そのエンコーディング識別子 ( CP_UTF8UTF-8 文字列など) をCA2WコンストラクターnCodePageパラメーターAddString()に指定することができます。

于 2012-12-28T11:50:13.907 に答える