日期:2014-05-17  浏览次数:21085 次

前辈,这是什么问题?
首先,感谢上次回帖解决问题的朋友!

c#调用vc的dll接口,接口为:GetXMLInfo(int nNum, char* cBuff, int nBuffLen);
我在c#中调用如下
string sBuff = "";
IntPtr ptrIn = Marshal.StringToHGlobalAnsi("sBuff");//把string转换成IntPtr类型
GetXMLInfo(1, ptrIn, 1024*300);
sBuff = Marshal.PtrToStringAnsi(ptrIn);//IntPtr转string

编译正常,但是在执行时,有时会提示内存错误,然后崩溃,有时正常;不知和什么有关系,求前辈!

有时调用接口已经成功后也会有问题
报错“检测到 FatalExecutionEngineError”
继续后提示“未处理 ExecutionengineException” System.ExecutionEngineException类型未经处理的异常出现在未知模块中

------解决方案--------------------
第一,检查调用约定是否一致
第二,char*用string或stringbuilder试试
------解决方案--------------------
往里传字符串用string,接收字符串用stringbuilder
------解决方案--------------------
应该是给你的dll操作了受保护的内存吧
------解决方案--------------------
GetXMLInfo(1, ptrIn, 1024*300);这句是否有可能访问了受保护的内存呢?
------解决方案--------------------
是你自己使用有问题:
string sBuff = ""; 这个是一个空文本(也许你就是要空文本,我就不知道了)
IntPtr ptrIn = Marshal.StringToHGlobalAnsi("sBuff"); 这里传递的不是sBuff变量,而是“sBuff ”字符串常量
GetXMLInfo(1, ptrIn, 1024*300); 你的ptrIn没有1024*300 这么长吧

------解决方案--------------------
引用:
引用:GetXMLInfo(1, ptrIn, 1024*300);这句是否有可能访问了受保护的内存呢?
我也怀疑,呢
c#调用vc的dll指针内存分问题?等赐教

GetXMLInfo 这个方法的各个参数代表的意思你都明白,有什么限制,还有第三个参数是不是大了些啊
------解决方案--------------------
和指针有关系吗?