C#调用C++出现的奇怪问题
C++ code:Int ReadState(void *return_buf, char *index)C# code:
[DllImport("clstatus.dll", CharSet = CharSet.Unicode)]
public static extern int ReadState(IntPtr return_buf, byte[] index);
IntPtr return_buf = new IntPtr();
byte[] index = new byte[4];
int return_r = ReadState(return_buf,index);
一直报内存错误,在网上查了查char *有说用string的有说用byte的。
各种试验都无效还是报这个错误。实在没有办法了,求助于各位。 --------------------编程问答--------------------
--------------------编程问答--------------------
[DllImport("clstatus.dll", CharSet = CharSet.Unicode)]
public static extern int ReadState(IntPtr return_buf, StringBuilder index);
按照这位大大用StringBuilder改了一下,
C# code:
[DllImport("clstatus.dll", CharSet = CharSet.Unicode)]
public static extern int ReadState(IntPtr return_buf, StringBuilder index);
IntPtr return_buf = new IntPtr();
StringBuilder index = new StringBuilder();
int return_r = ReadOilState(return_buf,index);
依然会报:尝试读取或写入受保护的内存。 --------------------编程问答--------------------
--------------------编程问答--------------------
[DllImport("clstatus.dll", CharSet=CharSet.Auto)]
public static extern int ReadState(IntPtr return_buf, StringBuilder index);
按照这位大大的改了字符集为auto还是报内存错误。
很奇怪咧。赶脚还是index这个参数的类型没有定义正确。 --------------------编程问答-------------------- 我一般是蒙的 --------------------编程问答-------------------- 没有人能解决么。加分加分啊。 --------------------编程问答-------------------- hwenycocodq520 的声明没错,你调用错误,缓冲区的指针指向一个 NULL,ReadState函数当然会出错 --------------------编程问答--------------------
[DllImport("clstatus.dll")]
public static extern int ReadState(ref byte[] return_buf, string index);
试试这个吧 --------------------编程问答-------------------- 多谢楼上几位大大,晚上到家了试试。 --------------------编程问答-------------------- 用 IntPtr 试下没。 --------------------编程问答--------------------
++++1
补充:.NET技术 , C#