2010-10-29 15 views
6

Potrzebuję opracować kilka klas, które powinny być możliwe do wywołania z VB6 z Managed C++ (C++/CLI).Generowanie widocznego zestawu COM z zarządzanego C++ (C++/CLI)

Najpierw opracowałem próbkę w języku C# i mogę używać zestawu przez COM bez problemów po prostu używając ustawienia "Zarejestruj dla współdziałania COM" i "Utwórz złożenie COM widoczne" (i używając atrybutu [ClassInterface (ClassInterfaceType) .AutoDual)] aby udostępnić metody w VB6:

Po tym starałem się przetłumaczyć próbkę na C++/CLI bez powodzenia.Utworzyłem tę samą klasę z atrybutem [ClassInterface (ClassInterfaceType.AutoDual)]. Ustawiłem ustawienie "Embedded IDL", aby określić wyjściową TLB, ale TLB nie jest generowane automatycznie.Jeśli używam tlbexp util przez wygenerowaną bibliotekę DLL, otrzymuję tlb, który można zaimportować do VB6, ale kiedy próbuję utworzyć instancję Otrzymuję "Komponent ActiveX nie może utworzyć obiektu (429) "

Co jeszcze muszę zrobić z projektem, aby pozwolić mu działać?

Z góry dziękuję.

Odpowiedz

6

Nie ma wiele do zrobienia, ale nigdy nie wspomniałeś o zarejestrowaniu zespołu. IDE C++ nie ma opcji "Register for COM interop". Z wiersza polecenia programu Visual Studio uruchom Regasm.exe na zespole, aby go zarejestrować. Potrzebujesz opcji/codebase, jeśli nie umieścisz zespołu w GAC. Opcja/tlb generuje bibliotekę typów, co sprawia, że ​​tlbexp.exe jest niepotrzebny.

+0

Automatyczne rejestrowanie złożenia za pomocą polecenia tlbexp, prawda? Opcja/tlb jest zgłaszana jako nierozpoznana przez kompilator i linker. Czy jesteś tego pewien? –

+0

Nie, tlbexp generuje tylko bibliotekę typów, nic nie jest rejestrowane. Opcja/tlb dotyczy Regasm.exe, a nie kompilatora lub linkera. Bardzo mnie to dziwi, że nie dostałeś tego z mojego postu. –

+0

To musi być coś związanego z tym, że jest trochę za późno. Ponownie przeczytałem twój wpis i jestem zdziwiony jak ty :) –

Powiązane problemy