Видимость класса COM: от C # до VB6 - PullRequest
7 голосов
/ 11 марта 2011

У меня есть приложение C # .Net 4.0 с одной стороны, а с другой - приложение VB6.Я создал COM-интерфейс, сделав Project COM видимым и активным регистром COM Interop.

Я протестировал COM-интерфейс, внедрив приложение C #, которое импортирует новый файл tlb.Кажется, все в порядке.

В качестве следующего шага я попытался использовать dll с vb6.DLL может быть загружен, но теперь я не могу видеть все публичные классы.В C # я вижу 4 класса в vb6, я вижу только 3.

Класс, который я не вижу, является «специальным», потому что он управляет интерфейсом и обслуживает события.

Класс помечен

[ComSourceInterfaces(typeof(COMEvents))]

, а интерфейс COMEvents похож на

[Guid("11947063-4665-4DE1-931D-9915CCD01794")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface COMEvents 
    {
        void MethodOne();
        void MethodTwo();
    }

Я должен сказать, что все работало нормально.Затем я добавил проект, который влияет только на другие сборки, которые загружаются во время выполнения проектом интерфейса COM.Они реализуют интерфейс, который изменился.Вот единственное изменение, которое я сделал в интерфейсе com, это добавление дополнительного параметра в метод.

Почему я больше не вижу урок?И почему это только тот класс, который я изменил, но не «рискованно»?

нужна помощь, спасибо!

PS: я пробовал до сих пор: -> все Project являются Build x86 ->Сборка проекта на компьютере x86 -> Обходчик зависимостей (отсутствуют GPSVC.DLL и IESHIMS.DLL, но они делали это и раньше, и я не думаю, что они имеют какой-либо отрицательный эффект, поскольку tlb создается и может быть загружен) -> tryied tlbexp.exeно получить ошибку зависимости, потому что время выполнения ассамблей новее, чем текущее.WTF?)

1 Ответ

5 голосов
/ 11 марта 2011

Обнаружено ... имел конструктор с 2 параметрами, а VB6 не поддерживает конструкторы с более чем нулевым параметром.

...