前辈,这是什么问题?

lgstudyvc 2013-01-07 11:24:38
首先,感谢上次回帖解决问题的朋友!

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类型未经处理的异常出现在未知模块中
...全文
285 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lc_ant 2013-01-08
  • 打赏
  • 举报
回复
和指针有关系吗?
wangyd324 2013-01-08
  • 打赏
  • 举报
回复
引用 8 楼 lgstudyvc 的回复:
引用 7 楼 wangyd324 的回复:GetXMLInfo(1, ptrIn, 1024*300);这句是否有可能访问了受保护的内存呢? 我也怀疑,呢 c#调用vc的dll指针内存分问题?等赐教
GetXMLInfo 这个方法的各个参数代表的意思你都明白,有什么限制,还有第三个参数是不是大了些啊
lgstudyvc 2013-01-07
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
第一,检查调用约定是否一致 第二,char*用string或stringbuilder试试
约定一致的 有时候使用是正常的,大多数会出问题
bdmh 2013-01-07
  • 打赏
  • 举报
回复
第一,检查调用约定是否一致 第二,char*用string或stringbuilder试试
kkzhangyu 2013-01-07
  • 打赏
  • 举报
回复
是你自己使用有问题: string sBuff = ""; 这个是一个空文本(也许你就是要空文本,我就不知道了) IntPtr ptrIn = Marshal.StringToHGlobalAnsi("sBuff"); 这里传递的不是sBuff变量,而是“sBuff ”字符串常量 GetXMLInfo(1, ptrIn, 1024*300); 你的ptrIn没有1024*300 这么长吧
lgstudyvc 2013-01-07
  • 打赏
  • 举报
回复
引用 7 楼 wangyd324 的回复:
GetXMLInfo(1, ptrIn, 1024*300);这句是否有可能访问了受保护的内存呢?
我也怀疑,呢 c#调用vc的dll指针内存分问题?等赐教
wangyd324 2013-01-07
  • 打赏
  • 举报
回复
GetXMLInfo(1, ptrIn, 1024*300);这句是否有可能访问了受保护的内存呢?
lgstudyvc 2013-01-07
  • 打赏
  • 举报
回复
引用 5 楼 wangyd324 的回复:
应该是给你的dll操作了受保护的内存吧
string sBuff = ""; IntPtr ptrIn = Marshal.StringToHGlobalAnsi("sBuff");//把string转换成IntPtr类型 GetXMLInfo(1, ptrIn, 1024*300); sBuff = Marshal.PtrToStringAnsi(ptrIn);//IntPtr转string 这样用,是保护的么?
wangyd324 2013-01-07
  • 打赏
  • 举报
回复
应该是给你的dll操作了受保护的内存吧
lgstudyvc 2013-01-07
  • 打赏
  • 举报
回复
调用接口正常后,有时会出现如下图问题
bigbaldy 2013-01-07
  • 打赏
  • 举报
回复
往里传字符串用string,接收字符串用stringbuilder

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧