1

私の 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;
}
4

1 に答える 1