我创建了两个程序 - 一个是用C#写的,一个是用C++写的,它们都调用了本地的C dll方法。C++可以正常工作,因为数据类型相同,但C#无法正常工作。
原生函数参数是unsigned char*
。我在C#中尝试使用byte[]
,但不起作用,然后我尝试了:
fixed(byte* ptr = byte_array) {
native_function(ptr, (uint)byte_array.Length);
}
它还是不起作用。将字节数组转换为
byte*
的方式正确吗?在C#中使用byte作为C中的unsigned char
也是正确的吗?编辑: 这个东西返回了错误的结果:
byte[] byte_array = Encoding.UTF8.GetBytes(source_string);
nativeMethod(byte_array, (uint)byte_array.Length);
这段代码也会返回错误的结果:
byte* ptr;
ptr = (byte*)Marshal.AllocHGlobal((int)byte_array.Length);
Marshal.Copy(byte_array, 0, (IntPtr)ptr, byte_array.Length);