C++ で記述された Win32 DLL から呼び出される C# 関数、コールバックがあります。発信者から UTF8 文字列が返されましたが、正しく受信できません。ハンガリーの特殊文字がすべて間違っています。
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate int func_writeLog(string s);
パラメータの型を に変更しIntPtr
てコードを書いてみると、ちゃんと書いてくれます。しかし、これは非常に遅い解決策だと思います:
byte[] bb = new byte[1000];
int i = 0;
while (true)
{
byte b = Marshal.ReadByte(pstr, i);
bb[i] = b;
if (b == 0) break;
i++;
}
System.Text.UTF8Encoding encodin = new System.Text.UTF8Encoding();
var sd = encodin.GetString(bb, 0, i);
次のような属性を文字列パラメーターに書き込もうとしました。
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate int func_writeLog([In, MarshalAs(UnmanagedType.LPTStr)] string s);
誰も働いていませんでした。アドバイスをお願いします。前もって感謝します!