Как передать данные из неуправляемого в управляемый код? - PullRequest
4 голосов
/ 07 марта 2011

Я использую C ++ / CLI Wrapper для доступа к чисто библиотеке C ++ (-> неуправляемой) из среды C # (-> управляемой). Я хочу встроить механизм, который позволяет библиотеке C ++ выдвигать информацию о своем статусе к платформе. В моем понимании это означает, что в какой-то момент мне придется вызывать хотя бы управляемую функцию из неуправляемого кода. Возможно ли это и как этого добиться?

Большое спасибо за вашу помощь!

С уважением, Jakob

Ответы [ 2 ]

7 голосов
/ 07 марта 2011

Используйте делегата, чтобы неуправляемый код вызывал управляемый метод.Marshal :: GetFunctionPointerForDelegate () создает заглушку, которая заботится о переходе, и поддерживается вызов метода экземпляра.Вы можете привести возвращенный указатель к указателю на функцию, используемому неуправляемым кодом.

Полный пример кода вы найдете в этом ответе .

2 голосов
/ 07 марта 2011

Я бы порекомендовал использовать для этого (управляемое) событие.Вы можете сделать так, чтобы ваша оболочка C ++ вызывала метод в вашем сгенерированном классе C ++ / CLI, который вызывает событие.

На событие можно легко подписаться со стороны C # и использовать как любое другое событие на основе C #.

...