在c++ /CLI中封装C回调

Wrapping C callback in C++/CLI

本文关键字:封装 回调 CLI c++      更新时间:2023-10-16

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

现在我在c++/CLI中编写Wrapper(DLL)。此包装器Dll将用于c#应用程序。

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

在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,你就完成了