小编use*_*150的帖子

C DLL中的PInvoke char*在C#中作为String处理.null字符问题

C DLL中的函数如下所示:

int my_Funct(char* input, char* output);
Run Code Online (Sandbox Code Playgroud)

我必须从C#app调用它.我通过以下方式执行此操作:

...DllImport stuff...
public static extern int my_Funct(string input, string output);
Run Code Online (Sandbox Code Playgroud)

输入字符串完美地传输到DLL(我有可见的证明).函数填写的输出虽然错误.我有六进制数据,如:

3F-D9-00-01
Run Code Online (Sandbox Code Playgroud)

但不幸的是,切断两个零之后的所有内容,只有前两个字节来到我的C#应用​​程序.它发生了,因为(我猜)它将它视为空字符并将其作为字符串的结尾.

任何想法我怎么能摆脱它?我试图将它指定为IntPtr而不是字符串,但我不知道以后如何处理它.我尝试过后:

 byte[] b1 = new byte[2];
 Marshal.Copy(output,b1,0,2);
Run Code Online (Sandbox Code Playgroud)

2通常应该是字节数组的长度.但我得到了各种错误:例如"请求的范围超出了数组的末尾".或"试图读取或写入受保护的内存......"

我感谢任何帮助.

c c# string pinvoke dllimport

10
推荐指数
1
解决办法
4694
查看次数

标签 统计

c ×1

c# ×1

dllimport ×1

pinvoke ×1

string ×1