我在我的C++/CLI項目中有一些本地函數和一個將它們公開給C#項目的ref(託管)類。從C++傳遞字符串到C++/CLI
它公開的功能之一返回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;
}
請添加代碼示例。 – shfire
@shfire已添加。 – MasterMastic
什麼是NativeGetWindowTitle?你爲什麼在這裏使用C字符串?當然你應該使用'std:wstring'?是什麼讓你相信'nativeTitle'在你將它傳遞給'String'構造函數時仍然有效?似乎很難想象它可能是。 –