Visual Studio 2010 MFC を使用して C++ プログラムをビルドしています。私のプログラムは、プロジェクトの一部ではない DLL を呼び出し、char* を受け入れます。LPCTSTR の形式で文字列を取得する関数があります。私は約2時間Googleを使用していますが、解決策は見つかりませんでした. MFC LPCTSTR を char* に変換するにはどうすればよいですか。私が見つけたものはすべて機能しないか、コンパイルされません。
15011 次
3 に答える
4
MFC では、変換するのが最も簡単ですCStringA
(結果のバッファーが読み取り専用の引数になる場合)。
LPCTSTR pszA = ...
CStringA sB(pszA);
const char* pszC = sB;
char* pszD = const_cast<char*>(pszC);
他のオプションが利用可能であり、議論されました:
- c++ LPCTSTR から const char への変換 *
- どのようにLPCTSTRからLPSTRに変換するのですか?
WideCharToMultiByte
、T2A
マクロなど
于 2012-03-20T06:35:37.227 に答える
1
LPCTSTR
プロジェクトがプリプロセッサシンボルを定義したかどうかに応じて、const wchar_t *
またはとして定義されます(または、MFCが使用するものを忘れました)。const char *
UNICODE
_UNICODE
したがって、問題の解決策は、UNICODE 設定を使用しているかどうかによって異なります。
使用している場合は、文字列を狭い文字列に変換する必要があります。これを行うために使用CStringA
します。
UNICODE を使用していない場合は、文字列を変更する必要がある場合に備えて、変更可能なコピーを作成して DLL に渡す必要があります。これを行うには、 を使用してコピーを作成しますCString
。
いずれの場合も、CString
オブジェクトにコピーを作成したら、GetBuffer
メソッドを使用して文字列への変更可能なポインターを取得し、DLL 関数を呼び出して、呼び出しのReleaseBuffer
後に呼び出します。
于 2012-03-20T06:38:53.717 に答える