下記のようにC#からC++にstring(unicode)を渡した結果、c++側で受け取った文字列wstring上で文字数が半分になってしまいました。
C#
1 2[DllImport(DllName, EntryPoint = "Test", CharSet =CharSet.Unicode)] 3internal static extern void Test(IntPtr ptr, string text_str); 4-------------- 5 6main(){ 7string text = "1234567890"; 8 9Test(handle, text); 10}
C++
1 2extern "C" viod Test( 3 TestObj * pObject, 4 const wchar_t* text_wch, 5) 6{ 7 8 std::wstring text_wstr = std::wstring(text_wch); 9 int length = text_wstr .length(); 10 11 12} 13
上記のようにC#のmain関数からc++のTestメソッドにstringの値をunicodeとしてを渡したところ、
受け取ったwchar_t型のtext_wchをwstring型に変換し、長さを確認したところ"5"という値になっていました。
元々のstringの値は"1234567890"なので、10が返ってくるべきなのですが、なぜこのような結果になっているかわからないです。
もしお分かりの方がいましたらアドバイスをお願いします。
ありがとうございます。
>y_waiwaiさん
wstringのlength()で値を取得しました。
>FKDさん
C#側でcallingconventionをcdeclとstdcallにして試してみましたが、結果は変わらなかったです。
下記両方を試してみました。
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "Test", CharSet =CharSet.Unicode)]
[DllImport(DllName, CallingConvention = CallingConvention.StdCall, EntryPoint = "Test", CharSet =CharSet.Unicode)]
> extern "C" viod Test
voidの間違いですよね?ちゃんと書いてください。何にしても、呼び出し規約は合わせないとスタックが壊れます。
あと、C++側で受け取ったwchar_t*の中身を出力してください。正しいデータは渡っていますか?
回答2件
あなたの回答
tips
プレビュー