Слабая связь COM в C # или как избежать COMException 0x80040154 - PullRequest
2 голосов
/ 16 марта 2010

У меня есть приложение .Net 2 C #, которое я разрабатываю и которое использует сгенерированную VB 6 COM DLL. VB DLL часто обновляется при сбое моего приложения с исключением System.Runtime.InteropServices.COMException (0x80040154). Часть используемой COM библиотеки DLL не изменяется, но версия (и CLSID) изменится.

Параметр «Конкретная версия» для ссылки имеет значение false. WrapperTool является простым.

Как мне сказать моему приложению не беспокоиться об изменениях в DLL? Есть ли способ проверить только те функции, которые я использую?

1 Ответ

2 голосов
/ 16 марта 2010

Это одна из самых распространенных ошибок COM, «Класс не зарегистрирован». Он начинается с VB6, у него есть возможность контролировать двоичную совместимость. Я точно забыл, как это выглядит, это было слишком долго. Если вы не контролируете это, VB6 собирается создать новый COM-сервер с другими значениями CLSID. Это требует перерегистрации библиотеки DLL с помощью Regsvr32.exe. И заново создать библиотеку взаимодействия с Tlbimp.exe. Последний шаг, вероятно, тот, который вы пропустили.

Обратите внимание, что использование различных значений CLSID является жестким требованием для COM, должно быть при изменении открытого интерфейса. Но не тогда, когда меняется только реализация.

...