В 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"
Так зарегистрируйтесь MyCallback
ввашей библиотеки C, зарегистрируйте делегата C # на MyDispatcherClass::MyDelegate
и все готово.