Неправильный объект, возвращенный из вызываемой оболочки COM

StackOverflow https://stackoverflow.com/questions/1347110

Вопрос

Я только что внес обновление в библиотеку dll, которая вызывается из VBA в Powerpoint.Вся разработка прошла нормально, но когда я попытался выполнить развертывание на компьютере другого пользователя, у меня возникла проблема, из-за которой я понятия не имею, как отлаживать.

Что происходит, так это то, что когда .Net объект создается в VBA, возвращаемая ссылка относится к неправильному объекту, поэтому следующая строка завершается ошибкой, поскольку метод не найден.

Dim myObj As Foo.Bar

Public Sub RefreshData()

//'instantiate object
Set myObj = New Foo.Bar   
//'call a method
myObj.HelloWorld

Последняя строка завершается ошибкой с Ошибка времени выполнения '438' Объект не поддерживает это свойство или метод что вызвано тем фактом, что myObj каким-то образом имеет тип "Неправильный.Введите" вместо "Foo.Bar".

"Неправильно.Тип" также есть в сборке, поэтому я предполагаю, что что-то идет не так с библиотекой типов, но я попытался выполнить регенерацию (используя regasm / codebase / tlb MyLib.dll), и это не помогло.

Я не знаю, как диагностировать это дальше.Надеюсь, кто-нибудь сможет перечислить некоторые шаги по диагностике такого рода проблем?

Это было полезно?

Решение 2

В этом случае удаление ссылки на файл tlb, а затем добавление его снова решило проблему

К сожалению, я так и не нашел общего решения или объяснения такого поведения.

Другие советы

Это может быть проблема с автоматически сгенерированными идентификаторами GUID (класс, интерфейс, библиотека типов) - когда вы меняли DLL, идентификаторы GUID менялись.Поскольку старый TLB использовал старые идентификаторы GUID, ссылаясь на него, вы связали эти старые идентификаторы GUID с именами типов, поэтому код не смог работать с новыми идентификаторами GUID.Большинство кодов на VB (6 и .NET), с которыми я сталкивался, имеют эту проблему, поэтому, если ваша DLL написана на VB, вероятно, это так (и ваша работа вокруг подтверждает эту теорию).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top