C#调试程序时报错,但生成后,直接运行exe程序正常?求解!

anlymaple 2013-10-17 04:42:59
做了一个c++的DLL封装,我用VS2010做一个C#项目,需将此DLL加载进来。

private void Form1_Load(object sender, EventArgs e)
{
if (!FaceDLL.OpenRegisterDll("fre.dll"))
{
MessageBox.Show("装载检测模块失败");
return;
}
}

此 FaceDLL.OpenRegisterDll方法是我通过加载从DLL中弄的方法,我直接按F5,则报错

“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”

但是我将此项目“生成”后直接运行生成好的exe执行文件,就不会报错了,搞不懂为啥,调试不能运行报异常,却运行能够正常。。。。

请大神教教!!!!
...全文
503 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wind_cloud2011 2013-10-17
  • 打赏
  • 举报
回复
会不会运行的EXE是没有异常时的生成的.
feiyun0112 2013-10-17
  • 打赏
  • 举报
回复
你还是先排除一个可能性再说吧
anlymaple 2013-10-17
  • 打赏
  • 举报
回复
OpenRegisterDll 这个实际上是封装的一个C++中DLL的一个函数,实际情况是这样的,一个童靴用C++(vs2008)开发了一组DLL包,其中代表性的一个叫A.dll,其中这个包中提供了几个方法方便外部调用,有一个方法就叫做RegisterDll,作用就是直接加载一个dll文件进去处理,当时那个项目的要求就是 A.dll文件与作为参数的"fre.dll"文件要处于同一级目录下,这样就不需要再写其他路径,我在用C#封装后,调用OpenRegisterDll 方法实际上就是调用的RegisterDll方法,我是将这些所有的dll文件都放在一起的,包括在项目中我也添加了的,同时使用每次复制,我也在debug目录中也复制了所有的dll,使得exe文件与所有dll都处于同一个目录级别,按理说不存在路径问题。
feiyun0112 2013-10-17
  • 打赏
  • 举报
回复
if (!FaceDLL.OpenRegisterDll("fre.dll"))
fre.dll放在哪?用全路径看看


*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
anlymaple 2013-10-17
  • 打赏
  • 举报
回复
路径很正常,没错误,而且生成后直接运行也没 问题,DLL代码在转移前单独测试运行也正常。
rtdb 2013-10-17
  • 打赏
  • 举报
回复
内存访问越界,说明C++部分有内存错误, 不过对C++而言,有时有内存错误也可以得到预期的效果,好像带病运行一样。
threenewbee 2013-10-17
  • 打赏
  • 举报
回复
检查下是不是相对路径的问题。

110,534

社区成员

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

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

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