日期:2014-05-18  浏览次数:20867 次

C# 引用Dll问题
引用了一个封装好的dll(里面的内容无法修改),调用里面的方法运行,前两次没有问题,运行三次后会提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”。测试代码如下   :            
[DllImport(@ "C:\dxlapi.dll ")]
                private   static   extern   bool   apiInitLibrary(string   s,   string   ss,   string   sss);
                [DllImport(@ "C:\dxlapi.dll ")]
                private   static   extern   bool   apiFinishLibrary();
                private   void   button1_Click(object   sender,   EventArgs   e)
                {
                        apiInitLibrary(String.Empty,   String.Empty,   String.Empty);
                        apiFinishLibrary();
                }
请问是什么原因,如何解决?

------解决方案--------------------
在没有文档支持的情况下调用非C#编写的DLL是常有奇怪的问题发生,原因就是你在用别人封装好的函数,我在这里说一下个人看法:
第一次执行apiInitLibrary(String.Empty, String.Empty, String.Empty);完成初始化。
第二次执行完毕后变量的相关内存被损坏。
第三次执行报告异常原因。

楼主你确定一下apiInitLibrary能否被重复执行,有些初始化函数是只能执行一次的,执行多次可能会导致错误。