前辈,这是什么问题?
首先,感谢上次回帖解决问题的朋友!
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 这个方法的各个参数代表的意思你都明白,有什么限制,还有第三个参数是不是大了些啊
------解决方案--------------------和指针有关系吗?