在C ++ / CLI中包装C回调

时间:2011-10-21 06:56:56

标签: c++ c++-cli

我有一个静态C库,我有非静态回调函数。注册此回调的客户端程序从摄像头获取视频数据。

现在我在C ++ / CLI中为此编写Wrapper( DLL )。这个Wrapper Dll将在C#应用程序中使用。

如何在C ++ / CLI中实现回调,以便C#代码可以注册它并从中获取视频数据。

1 个答案:

答案 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,然后就完成了。