Создание видимой сборки COM из управляемого c ++ (C ++ / CLI)

Мне нужно разработать некоторые классы, которые должны быть вызваны из VB6 с помощью Managed C ++ (C ++ / CLI).

Сначала я разработал образец на C #, и я могу без проблем использовать сборку через COM, просто используя настройки «Зарегистрировать для COM-взаимодействия» и «Сделать сборку COM видимой» (и используя атрибут [ClassInterface (ClassInterfaceType.AutoDual)] для сделать методы доступными на VB6.

После этого я безуспешно пытался перевести образец на C ++ / CLI. Я создал тот же класс с атрибутом [ClassInterface (ClassInterfaceType.AutoDual)]. Я установил параметр «Embedded IDL», чтобы указать выходной TLB, но TLB не создается автоматически. Если я использую tlbexp util поверх сгенерированной DLL, я получаю tlb, который можно импортировать в VB6, но когда я пытаюсь создать экземпляр, я получаю сообщение «ActiveX compoennt не может создать объект (429)»

Что еще мне нужно сделать с проектом, чтобы он заработал?

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


person Ignacio Soler Garcia    schedule 29.10.2010    source источник


Ответы (1)


Ничего особенного, но вы никогда не упоминали о регистрации сборки. В C ++ IDE нет опции «Зарегистрироваться для COM-взаимодействия». В командной строке Visual Studio запустите Regasm.exe для сборки, чтобы зарегистрировать ее. Если вы не помещаете сборку в GAC, вам понадобится параметр / codebase. А параметр / tlb создает библиотеку типов, делая tlbexp.exe ненужным.

person Hans Passant    schedule 29.10.2010
comment
Я регистрирую сборку автоматически в tlbexp, да? Параметр / tlb сообщается как нераспознанный компилятором и компоновщиком. Вы уверены, что? - person Ignacio Soler Garcia; 29.10.2010
comment
Нет, tlbexp создает только библиотеку типов, ничего не регистрируется. Параметр / tlb предназначен для Regasm.exe, а не для компилятора или компоновщика. Меня очень озадачивает, что вы не поняли этого из моего поста. - person Hans Passant; 29.10.2010
comment
Это должно быть связано с тем, что здесь немного поздно. Я перечитал твой пост и озадачен не меньше тебя :) - person Ignacio Soler Garcia; 29.10.2010