Мне нужно было изменить код в C # DLL и использовать его в приложении C ++. Я совсем не разбираюсь в C ++, поэтому, если что-то не понятно, дайте мне знать.
Я зарегистрировал сборку C #, используя:
regasm file.dll /tlb:file.dll /codebase
Однако, когда я пытаюсь использовать это в приложении c ++:
CLSID clsid;
CLSIDFromProgID(L"MyApp.MyClass", &clsid);
HRESULT hr = CoCreateInstance(clsid,NULL, CLSCTX_INPROC_SERVER ,IID_MyClass, reinterpret_cast<void**>(&myclass));
hr
возвращается с 0x8013151a: access to this member is denied
Я заметил, что в реестре я вижу несколько версий C # DLL (с Codebase
указывая на разные места DLL).
Я думаю, что проблема в том, что он не использует правильный DLL. (Я могу быть совершенно не прав).
Мой вопрос заключается в следующем: как узнать, какую версию DLL он пытается загрузить?
Заранее спасибо.
Довольно маловероятно, что это проблема DLL Ада. Вы можете перепроверить, используя окно Debug + Windows + Modules отладчика, оно показывает путь к DLL. Поддерживайте чистоту реестра, позволяя MSBuild зарегистрировать компонент, Project + Properties, вкладка Build, опция «Зарегистрироваться для взаимодействия COM». VS должен работать с повышенными правами.
Это MethodAccessException, всегда ошибка кодирования. Требуется психическая отладка, не видя ваш код, но самое простое объяснение состоит в том, что конструктор по умолчанию вашего класса C # не является открытым.