当前位置:编程学习 > C#/ASP.NET >>

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);
--------------------编程问答--------------------
引用 1 楼 hwenycocodq520 的回复:

[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);
--------------------编程问答--------------------
引用 3 楼 hwenycocodq520 的回复:

[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 试下没。 --------------------编程问答--------------------
引用 2 楼 dzfree 的回复:
Quote: 引用 1 楼 hwenycocodq520 的回复:


[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);

依然会报:尝试读取或写入受保护的内存。

++++1
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,