日期:2014-05-17  浏览次数:21152 次

调用三方DLL出现的错误:FatalExecutionError
调用一个设备的操作DLL文件。
初始化的过程都是好的。但是在读缓存的时候出现如下错误:

运行库遇到了错误。此错误的地址为   0x79ef067e,在线程   0xe58   上。错误代码为   0xc0000005。此错误可能是   CLR   中的   bug,或者是用户代码的不安全部分或不可验证部分中的   bug。此   bug   的常见来源包括用户对   COM-interop   或   PInvoke   的封送处理错误,这些错误可能会损坏堆栈。

                [DllImport( "ldv32.dll ")]
                private   static   extern   string   ldv_get_version();
                [DllImport( "ldv32.dll ")]
                private   static   extern   short   ldv_open(string   id,ref   short   handle);
                [DllImport( "ldv32.dll ")]
                private   static   extern   short   ldv_close(short   handle);
                [DllImport( "ldv32.dll ")]
                private   static   extern   short   ldv_read(short   handle,   ref   byte[]   data,   short   len);
                [DllImport( "ldv32.dll ")]
                private   static   extern   short   ldv_read(short   handle,   byte[]   data,   short   len);

//下面是初始化,OK
                        ret   =   ldv_open( "LON1 ",   ref   handle);
                        if   (ret   ==   0)
                        {
                                Text   =   Text   +   "\tOpen   device   successfully ";
                                timer1.Enabled   =   true;
                        }

//下面是读数据,出现错误
                        short   ret;
                        byte[]   data;
                        ret   =   ldv_read(handle,   out   data,   257);   //   错误地点
                        if   (ret   ==   0)
                        {
                                listBox1.Items.Add(DateTime.Now.ToLongTimeString()   +   data);
                        }



------解决方案--------------------
try
[DllImport( "ldv32.dll ")]
private static extern short ldv_read(s