Я действительно смущен множеством дезинформации о родном/управляемом взаимодействии.Вызов собственного обратного вызова из управляемого кода .NET (при загрузке управляемого кода с помощью COM)
У меня есть обычный C++ exe, который НЕ построен с использованием средств CLR (это не управляемый C++, ни C++/CLI, и никогда не будет). Этот C++ exe является «ответственным», для него нет управляемой обертки.
Я хотел бы получить доступ к некоторому коду, который у меня есть в сборке C#, из моего C++ exe. Я могу получить доступ к сборке C# из моего кода на C++, используя COM. Однако, когда мой код C# обнаруживает событие, я хотел бы, чтобы он перезвонил в мой код на C++. Указатель функции C++ для обратного вызова будет предоставлен во время выполнения. Обратите внимание, что указатель на функции C++ - это функция, найденная в среде исполнения exe. Он может использовать статические элементы оттуда. Я не хочу, чтобы управляемый код пытался загрузить и загрузить некоторую DLL для вызова функции (нет DLL).
Как передать этот указатель на C++ на мой код C# через COM/.NET и успешно ли его код C#?
Спасибо!
На шаге 2 указатель функции первоначально поступает в C# -land как IntPtr? – evilfred
Чтобы получить указатель с C/C++ на C#, он будет маршалин. Да, указатели C/C++ представлены как C# 'IntPtr', размер которых зависит от платформы. –
Я, наверное, делаю что-то немое. Компилятор C++ жалуется, что он не может преобразовать мой параметр из voic (__ cdecl *) (UINT) в long (метод принимает IntPtr в C#). Кроме того, пример Чжана включает в себя указатель на функцию C++, полученный на C#, но не один из C++ ... – evilfred