做了一个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执行文件,就不会报错了,搞不懂为啥,调试不能运行报异常,却运行能够正常。请大神教教!!!!

解决方案 »

  1.   

    路径很正常,没错误,而且生成后直接运行也没 问题,DLL代码在转移前单独测试运行也正常。
      

  2.   

    if (!FaceDLL.OpenRegisterDll("fre.dll"))
    fre.dll放在哪?用全路径看看  
    *****************************************************************************
    签名档: http://feiyun0112.cnblogs.com/
      

  3.   

    OpenRegisterDll  这个实际上是封装的一个C++中DLL的一个函数,实际情况是这样的,一个童靴用C++(vs2008)开发了一组DLL包,其中代表性的一个叫A.dll,其中这个包中提供了几个方法方便外部调用,有一个方法就叫做RegisterDll,作用就是直接加载一个dll文件进去处理,当时那个项目的要求就是 A.dll文件与作为参数的"fre.dll"文件要处于同一级目录下,这样就不需要再写其他路径,我在用C#封装后,调用OpenRegisterDll  方法实际上就是调用的RegisterDll方法,我是将这些所有的dll文件都放在一起的,包括在项目中我也添加了的,同时使用每次复制,我也在debug目录中也复制了所有的dll,使得exe文件与所有dll都处于同一个目录级别,按理说不存在路径问题。