Я пишу «драйвер» для программы, драйвер связывается с некоторыми устройствами в сети.У меня уже есть программное обеспечение 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 (), даже не внутриэто.
Я упускаю что-то действительно очевидное, что я должен сделать, чтобы взаимодействие заработало?Большая часть информации в сети просто говорит, что она должна «просто работать»