Как зарегистрировать нестатический обратный вызов в качестве указателя на функцию в среде C ++ / CLI? - PullRequest
1 голос
/ 07 сентября 2010

У нас есть класс C ++ / CLI, назовем его классом A, из которого мы хотели бы зарегистрировать нестатический обратный вызов («MyNonStaticCallback») в неуправляемый класс C ++ (класс B).

например

void MyNonStaticCallback(void* ...)
{
    // Raise a C# event from this code
}

// Register callback into class B
myClassBInstance->RegisterCallback(..., &MyNonStaticCallback, ...); 

Причина, по которой мы хотим нестатический обратный вызов, заключается в том, что мы хотим вызвать событие C # из этой функции обратного вызова.

Я понимаю, что невозможно передать элемент данных экземпляра в качестве указателя на функцию.Какой лучший способ продолжить здесь?

Спасибо и наилучшие пожелания,

Romain

1 Ответ

1 голос
/ 07 сентября 2010

Используйте метод Marshal.GetFunctionPointerForDelegate, чтобы получить указатель на функцию, передаваемую в неуправляемый код. Замените void * на IntPtr в MyNonStaticCallback, который соответствует неуправляемому void *. Создайте экземпляр делегата по общим правилам C ++ / CLI.

...