以下で質問させていただいたものです。
C#とC++で1文字当たりのバイト数を揃えてデータを受け渡すところまでは理解出来たいのですが、
別のポイントで躓いてしまいました。
https://teratail.com/questions/374934
C#で1文字を32ビットに変換し、byte配列に格納し、その情報をc++のコードに渡したところ
C++側で配列の末尾によくわからない値が格納されており、意図した配列数で扱うことができませんでした。
文字配列を渡すC#コード、受取後の文字数をカウントするC++のコードは以下になります。
C#
1 public void main(){ 2 3 string text = "ABCDE12345"; 4 var enc = new UTF32Encoding(); 5 Encoding u32 = Encoding.UTF32; 6 7 8 Byte[] char32_text = enc.GetBytes(text); 9 10 Test(handle, char32_text); 11} 12 13 14 [DllImport(DllName, CallingConvention = CallingConvention.Cdecl,EntryPoint = "Test")] 15 internal static extern void Test(IntPtr ptr, byte[] text);
C++
1 extern "C" void Test( 2 Object * pObject, 3 const wchar_t* wchar_text 4) 5{ 6 7 int size = sizeof(wchar_t) * (wcslen(wchar_text)); 8 9}
C#側ではbyte[]の長さが40で設定されていることは確認できましたが、
c++側では受け取った文字配列の長さが11となっていました。
また、C++側で受け取った値を"ウォッチ"で確認したところ、下記のような値となっていました。
0xc748a7f8 L"ABCDE12345\xdaf15ff8"
"\xdaf15ff8"の部分が不要だと推測しますが、どのように対処したらよいでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。