ошибка вызова управляемого кода из неуправляемого в C ++ / CLI - PullRequest
1 голос
/ 06 мая 2011

Я пишу «драйвер» для программы, драйвер связывается с некоторыми устройствами в сети.У меня уже есть программное обеспечение C #, работающее с устройствами, поэтому планируется повторное использование кода.
Таким образом, dll драйвера действительно является взаимодействием между программой и уже доступными сборками, написано на C ++ / CLI.Программа вызывает методы, описанные в интерфейсе, dll взаимодействия вызывает код C #, вот как я это вижу.

Я реализую методы, вызываемые программой, используя #pragma unmanaged

DeviceSearch::DeviceSearch(IDeviceSearchHandler* handler):m_handler(handler)
{
    ManagedWrapper mw;
    mw.Init();
}

ManagedWrapperреализован в управляемом коде, очевидно

void ManagedWrapper::Init()
{

    //some code
}

Однако проблема здесь возникает.Если Init () пуст или вызывает методы / классы, определенные в C ++, он работает нормально.Однако, если я пытаюсь вызвать код C # (на который ссылается использование #using, где Facade.dll - это C # dll, выполняющая некоторые функции), я получаю исключение нарушения прав доступа при вызове mw.Init (), даже не внутриэто.

Я упускаю что-то действительно очевидное, что я должен сделать, чтобы взаимодействие заработало?Большая часть информации в сети просто говорит, что она должна «просто работать»

1 Ответ

1 голос
/ 06 мая 2011

Посмотрите, поможет ли это:

Согласно Как я могу использовать C # dll в проекте Win32 C ++?

"Определить абстрактный интерфейсный класс в вашем нативномC ++, затем создайте конкретный подкласс внутри управляемой C ++ DLL. Вызовите ваши объекты C # в реализациях метода.

Наконец, экспортируйте фабричную функцию, которая будет создавать экземпляр класса реализации и возвращать указатель базового класса, которыйваш нативный код может использовать. "

...