您的位置:首页 > 编程语言 > C语言/C++

C# 调用 C++ DLL 中的委托,引发“对XXX::Invoke类型的已垃圾回收委托进行了回调”错误的解决办法

2013-05-22 11:41 776 查看
C++

public delegate bool EventCallBack(int index, int type, int param1, int param2);
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_SetEventCallBack", CallingConvention = CallingConvention.Cdecl)]
public static extern int WAPA_IPC_SetEventCallBack(EventCallBack fEvent);


  C#调用

public ctlCamera()
{
InitializeComponent();
WAPAMethods.WAPA_IPC_Init(WAPAMethods.TVFORMAT.PAL);
WAPAMethods.WAPA_IPC_SetEventCallBack(IpcOnEvent);
}
private bool IpcOnEvent(int index, int type, int param1, int param2)
{
var status = "未";
switch (type)
{
case 0:
status = "断";
break;
case 1:
status = "断";
break;
case 2:
status = "移";
break;
case 3:
status = "警";
break;
}
Console.Write(string.Format("索引:{0},类型:{1},参数1:{2},参数2:{3}", index, type, param1, param2));
return true;
}


  出现错误: 对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。

解决方法:

将委托赋值给类中的成员,再调用此成员

private static WAPAMethods.EventCallBack eventCallBack;
public ctlCamera()
{
InitializeComponent();
WAPAMethods.WAPA_IPC_Init(WAPAMethods.TVFORMAT.PAL);
eventCallBack = IpcOnEvent;
WAPAMethods.WAPA_IPC_SetEventCallBack(eventCallBack);
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐