我有一个静态C库,我有非静态回调函数。注册此回调的客户端程序从摄像头获取视频数据。
现在我在C ++ / CLI中为此编写Wrapper( DLL )。这个Wrapper Dll将在C#应用程序中使用。
如何在C ++ / CLI中实现回调,以便C#代码可以注册它并从中获取视频数据。
答案 0 :(得分:2)
在C ++ / CLI中,您可以使用静态函数(使用本机C签名,可以作为C库的回调),调用托管委托:
// MyDispatcherClass.h
#pragma once
public delegate void MyDelegateType();
public ref class MyDispatcherClass
{
public:
static MyDelegateType^ MyDelegate;
};
static void MyCallback(/*...*/)
{
if (MyDispatcherClass::MyDelegate != nullptr)
MyDispatcherClass::MyDelegate(/* do some type mapping here if needed */);
}
// MyDispatcherClass.cpp:
#include "stdafx.h"
#include "MyDispatcherClass.h"
请在您的C库中注册MyCallback
,将您的C#代理注册到MyDispatcherClass::MyDelegate
,然后就完成了。