我有一个 C# 函数,一个回调,从用 C++ 编写的 Win32 DLL 调用。来电者给了我一个 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);
没有人在工作。请问有什么建议吗?提前致谢!