2013-03-13 22 views
5

Mam pliki tlb, które zawierają deklarację funkcji, której potrzebuję użyć.Jak używać plików tlb w macierzystym projekcie C++

Jeśli używam

#import "type_library.tlb" 

mogę correclty odwołać z funkcji z mojego kodu:

tlb_namespace::required_function(); 

Ale kiedy mogę skompilować projekt łącznik mówi, że tlb_namespace :: required_function jest nierozwiązany symbol zewnętrzny .

Jak mogę z powodzeniem zbudować tego rodzaju projekt?

EDIT:

Użyłem tej samej biblioteki w projekcie typu dostępu Dummy VBA. Dodałem odwołanie do biblioteki typów i zauważyłem, że niektóre funkcje zawarte w bibliotece typów są poprawnie wywoływane. Ale niektóre z nich nie są. VBA mówi, że nie może zlokalizować punktu wejścia w powiązanej bibliotece dll.

Czy to może wyjaśnić nierozwiązany zewnętrzny symbol podczas budowania aplikacji C++?

Mam również zauważyć, że funkcja braku deklarowane są w TLB jak ten:

UPPER_function_name 

ale w dll są zadeklarowane tak:

Upper_function_name 

To może być problem?

Czy można rozwiązać ten błąd bezpośrednio modyfikując plik binarny tlb lub dll?

+0

jest '#import "type_library.tlb" 'jedyna dyrektywa #import od tego tlb w twoim projekcie. Czy znajduje się on w tym samym cpp co wywołanie funkcji? W jaki sposób zdefiniowano 'required_function' w wygenerowanych plikach .tlh i .tli? –

+0

@ZdeslavVojkovic Projekt na razie jest bardzo prosty, więC#import jest tylko jeden i znajduje się w tym samym pliku .cpp połączenia. Próbowałem wygenerować pliki .tlh i .tli ... pojawiają się tylko wtedy, gdy przejdę do właściwości projektu \ Preprocessor Generate Preprocessed file. Jednak prawdopodobnie nie dodaję ich w poprawnym trybie do projektu, ponieważ jeśli to zrobię, otrzymam inny błąd łącznika. – sblandin

+0

nie musisz ich dodawać. Zostaną one utworzone podczas kompilacji w twoim folderze release/debug, więc szukaj ich tam. –

Odpowiedz

3

Użyj IDE, aby wyświetlić informacje TLB.
Użyj tego help: How to: View Type Library Information

Na IDE: Widok-> Przeglądarka Object, kliknij "..." Edycja klienta Set Component, przeglądać plik TLB i Dodaj, aby wyświetlić informacje.

Potwierdź nazwę przestrzeni używanej dla.

+0

Przepraszamy za spóźnioną opinię. Jeśli otworzę plik tlb w przeglądarce obiektów, zobaczę ją jako bibliotekę zawierającą pojedynczą przestrzeń nazw zawierającą kilka modułów grupujących niektóre funkcje. Kiedy #portportuję tlb w natywnym projekcie C++, otrzymuję przestrzeń nazw zawierającą tylko funkcję. Jak już powiedziałem, dodanie odwołania do tlb w projekcie VBA pozwala mi wywoływać funkcje, ale w natywnym projekcie C++ dostaję błąd linkera. – sblandin

0

używać nazw, aby rozwiązać ten błąd linkera: przykład: #import "<>" raw_interfaces_only używając nazw <>

to rozwiąże problem

Powiązane problemy