Видимость класса COM: от C# до VB6

У меня есть приложение 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: я пробовал до сих пор: -> все проекты являются Build x86 -> Project Build на компьютере x86 -> Dependency Walker(GPSVC.DLL и IESHIMS.DLL отсутствуют, но они также делали раньше, и я не думаю, что у них есть какие-либо следствие того, что tlb собран и может быть загружен) -> tryied tlbexp.exe, но получает ошибку зависимости, потому что время выполнения ассамблеи новее, чем текущее. WTF?)

1 ответ

Решение

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

Другие вопросы по тегам