COM Codebase Location — Как выбрать версию для использования?

Мне нужно было изменить код в 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 он пытается загрузить?

Заранее спасибо.

1

Решение

Довольно маловероятно, что это проблема DLL Ада. Вы можете перепроверить, используя окно Debug + Windows + Modules отладчика, оно показывает путь к DLL. Поддерживайте чистоту реестра, позволяя MSBuild зарегистрировать компонент, Project + Properties, вкладка Build, опция «Зарегистрироваться для взаимодействия COM». VS должен работать с повышенными правами.

Это MethodAccessException, всегда ошибка кодирования. Требуется психическая отладка, не видя ваш код, но самое простое объяснение состоит в том, что конструктор по умолчанию вашего класса C # не является открытым.

4

Другие решения


По вопросам рекламы [email protected]