读书人

调用三方DLL出现的异常:FatalExecuti

发布时间: 2012-10-11 10:16:10 作者: rapoo

调用三方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(short handle, System.IntPtr data, short len);
call


byte[] data = new byte[257];
System.Intptr pdata = Marshal.UnsafeAddrOfPinnedArrayElement( data, 0 );
ldv_read( handle , pdata , 257 );
or

不要用ref byte[],直接用byte[]
调用之前要初始化一下

读书人网 >C#

热点推荐