出现错误:引发类型为“System.ExecutionEngineException”的异常

cynkx 2007-11-16 08:08:30
我用Twain获取扫描仪的设置,调用dll如下:

[DllImport("twain_32.dll", EntryPoint = "#1")]
private static extern TwRC DScap([In, Out] TwIdentity origin, [In] TwIdentity dest, TwDG dg, TwDAT dat, TwMSG msg, [In, Out]TwCapability capa)


其中:TwCapability定义为
internal class TwCapability
{ // TW_CAPABILITY
public TwCapability( TwCap cap )
{
Cap = (short) cap;
ConType = -1;
Handle = IntPtr.Zero;

}
public TwCapability( TwCap cap, short sval )
{
Cap = (short) cap;
ConType = (short) TwOn.One;
Handle = Twain.GlobalAlloc( 0x42, 6 );
IntPtr pv = Twain.GlobalLock( Handle );
Marshal.WriteInt16( pv, 0, (short) TwType.Int16 );
Marshal.WriteInt32( pv, 2, (int) sval );
Twain.GlobalUnlock( Handle );
}
~TwCapability()
{
if( Handle != IntPtr.Zero )
Twain.GlobalFree( Handle );
}
public short Cap;
public short ConType;
public IntPtr Handle;

}


操作:

TwCapability capXResolution = new TwCapability(TwCap.IXResolution); //取得X轴的分辨率
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Get, capXResolution);

//取出capXResolution中的值
pContain = GlobalLock(capXResolution.Handle);
Marshal.PtrToStructure(pContain, twrange);
———这里出现错误:引发类型为“System.ExecutionEngineException”的异常

在错误语句处还有一句话:此代码调用了另一个函数。当该函数完成后,这是将要执行的下一语句。

请问怎么解决呢?麻烦帮帮忙啊

...全文
1689 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
simonLi 2011-11-22
  • 打赏
  • 举报
回复
/// <summary>
/// 从实体类向操作类中传值时的返回类型
/// </summary>
public enum CommonDataModalCopyValuesResult
{
/// <summary>
/// 操作成功
/// </summary>
CVR_OK = 0,
/// <summary>
/// 类型错误,可能是传入的参数中目标对象所属的类未从源对象所属类中继承
/// </summary>
CVR_TYPEERROR = 1
}
/// <summary>
/// 通用数据模型
/// </summary>
public class CommonDataModal
{
/// <summary>
/// 复制:仅可以从实体类中向数据库类中进行复制
/// </summary>
public static CommonDataModalCopyValuesResult CopyValues(CommonDataModal CopyTo, CommonDataModal CopyFrom)
{
//操作类
Type t1 = CopyTo.GetType();

//实体类
Type t2 = CopyFrom.GetType();

//为确保数据复制成功,请勿手工在操作类中添加私有属性
Type CopyToBaseType = t1.BaseType;

//要保证是从对应的类中复制数据
if (CopyToBaseType != t2)
{
return CommonDataModalCopyValuesResult.CVR_TYPEERROR;
}

PropertyInfo[] props1 = t1.GetProperties(BindingFlags.Public | BindingFlags.Instance);
PropertyInfo[] props2 = t2.GetProperties(BindingFlags.Public | BindingFlags.Instance);

for (int i = 0; i < props1.Length; i++)
{
props1[i].SetValue(CopyTo, props2[i].GetValue(CopyFrom, null), null);
}

return CommonDataModalCopyValuesResult.CVR_OK;
}













namespace LeaveMessageEntity
{
public class E_MessageSet:CommonDataModal
{

private Int32 _Id;

public Int32 Id
{
get { return _Id;}
set { _Id = value;}
}

private Int32 _ShowPageNum;

public Int32 ShowPageNum
{
get { return _ShowPageNum;}
set { _ShowPageNum = value;}
}

private Int32 _MaxByteNum;

public Int32 MaxByteNum
{
get { return _MaxByteNum;}
set { _MaxByteNum = value;}
}
}
}












Ht_LeaveMessageDAL.D_MessageSet d = new Ht_LeaveMessageDAL.D_MessageSet(db);
//6.调用静态方法从实体中复制值
CommonDataModalCopyValuesResult copyrst = CommonDataModal.CopyValues(d, eMessageSet);


为什么会t2.GenericParmeterAttributes 引发了 System.InvlidOperationException 类型的异常呢?
simonLi 2011-11-22
  • 打赏
  • 举报
回复
我的是GenericParmeterAttributes 引发了 System.InvlidOperationException 类型的异常,这个是什么原因???
Magine_Wen 2011-07-27
  • 打赏
  • 举报
回复
我也遇到了这个问题 顶一下
cynkx 2007-11-16
  • 打赏
  • 举报
回复
后来错误又变为:
运行库遇到了错误。此错误的地址为 0x79f387cc,在线程 0xd20 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
其中查看capXResolution中的Handle,其Size 值显示: 当前方法的代码已经过优化,因此无法计算表达式的值。

是为什么呢?

111,092

社区成员

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

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

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