C DLL 中的函数如下所示:
int my_Funct(char* input, char* output);
我必须从 C# 应用程序调用它。我通过以下方式执行此操作:
...DllImport stuff...
public static extern int my_Funct(string input, string output);
输入字符串完美地传输到 DLL(我有明显的证据)。函数填写的输出虽然是错误的。我里面有六边形数据,比如:
3F-D9-00-01
但不幸的是,两个零之后的所有内容都被删除了,只有前两个字节进入我的 C# 应用程序。它发生了,因为(我猜)它被视为空字符并将其作为字符串的结尾。
知道我怎么能摆脱它?我试图将它指定为 out IntPtr 而不是字符串,但我不知道之后该怎么处理它。我试图做之后:
byte[] b1 = new byte[2];
Marshal.Copy(output,b1,0,2);
2 通常应该是字节数组的长度。但我得到了各种各样的错误:比如“请求的范围超出了数组的末尾。” 或“试图读取或写入受保护的内存......”
我很感激任何帮助。