调用VC6写的Dll中函数MP4_ClientRigisterDrawFun时出现了异常,异常信息为:
------------------------------
检测到 FatalExecutionEngineError
Message: 运行库遇到了错误。此错误的地址为 0x79f387cc,在线程 0x370 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
-------------------------------
下面说说详细情况:
现在做的软件是使用海康威视H.264视音频压缩卡的监控软件调用的函数声明为:
BOOL __stdcall MP4_ClientRigisterDrawFun(LONG StockHandle,void (CALLBACK* 
DrawFun)(LONG StockHandle,HDC hDc,LONG nUser),LONG nUser) 我用C#封装如下:[DllImport("hikclient.dll")]
public static extern bool MP4_ClientRigisterDrawFun(int StockHandle, DrawFun x, int nUser);//委托声明
public delegate void DrawFun(int StockHandle,  System.Drawing.Graphics hDc, int nUser);在代码中调用如下://使用函数df实例化委托
DrawFun pd=new DrawFun(df);
//保护对象不被垃圾回收
GCHandle.Alloc(pd);
//下面这一句产生异常,result和2参数可忽略,不要管它们
PCDvrMonitor.PcHikClient.MP4_ClientRigisterDrawFun(result, pd, 2);//下面这个函数是回调函数,用来在屏幕上输出字幕
private void df(int StockHandle, System.Drawing.Graphics hDc , int nUser)
{
}我仔细检查了封装,找不出原因,到底是哪地方出现了错误呢?
另外:使用VC6是可以正常调用MP4_ClientRigisterDrawFun函数的,就是在.NET里面调用会出现此异常,拜托大家帮帮看看,谢谢!!