私の C++/CLI プロジェクトには、いくつかのネイティブ関数と、それらを C# プロジェクトに公開する ref (マネージ) クラスがあります。
それが公開する関数の 1 つは、WCHAR*
文字列 (別名LPWSTR
/ wchar_t*
) を返します。
それを出力する C# プログラムを実行したところ、四角い記号しか表示されませんでした。
ネイティブの return ステートメントにブレークポイントを設定しました。デバッガーは、返された文字列が正しいことを示しています。次に、一度踏み込んでマネージド関数 (WCHAR*
戻り値に設定された変数を持つ関数) にたどり着くと、どういうわけかそれらの四角形の記号が表示されます。
文字列が管理された「セクション」に入ると、めちゃくちゃになるようです。コードを表示しますが、文字列を
変換する前に問題が発生するため、実際には問題になりません。WCHAR*
System::String
要求されたコード サンプル:
static String^ GetWindowTitle(IntPtr windowHandle)
{
HWND hWnd = (HWND)windowHandle.ToPointer();
LPWSTR nativeTitle = NativeGetWindowTitle(hWnd).get();
String^ title = gcnew String(nativeTitle);
return title;
}