2013-03-13 9 views
5

Ich habe eine Tlb-Dateien, die einige Funktionsdeklaration enthält, die ich verwenden muss.Wie verwendet man Tlb-Dateien in einem nativen C++ - Projekt

Wenn ich

#import "type_library.tlb" 

ich Correclty die Funktion von meinem Code verweisen kann:

tlb_namespace::required_function(); 

Aber wenn ich das Projekt kompilieren der Linker sagt, dass tlb_namespace :: required_function ist ein ungelöstes externes Symbol .

Wie kann ich diese Art von Projekt erfolgreich erstellen?

EDIT:

ich die gleiche Art Bibliothek in einem Dummy VBA Access-Projekt verwendet haben. Ich habe den Verweis auf die Typbibliothek hinzugefügt, und ich habe festgestellt, dass einige der in der Typbibliothek enthaltenen Funktionen korrekt aufgerufen werden. Aber einige von ihnen sind nicht. VBA sagt, dass es ihren Einstiegspunkt in der verwandten DLL nicht finden kann.

Kann dies das nicht aufgelöste externe Symbol beim Erstellen der C++ App erklären?

Ich habe auch bemerkt, dass die fehlerhafte Funktion im TLB wie folgt deklariert werden:

UPPER_function_name 

aber in der DLL werden wie folgt erklärt:

Upper_function_name 

Kann dies das Problem sein?

Ist es möglich, diese Art von Fehler zu lösen, direkt die binäre tlb-Datei oder dll zu ändern?

+0

ist '#import "type_library.tlb" lösen 'die einzige # Import-Anweisung für diese TLB in Ihrem Projekt. Befindet es sich in derselben cpp wie Funktionsaufruf? Wie ist 'required_function' in den generierten .tlh- und .tli-Dateien definiert? –

+0

@ZdeslavVojkovic Das Projekt für jetzt ist ein sehr einfaches Projekt, also ist der Import nur einer und befindet sich in derselben CPP-Datei des Aufrufs. Ich habe versucht, .tlh und .tli Dateien zu erzeugen ... sie erscheinen nur, wenn ich zur Projekteigenschaft \ Preprocessor Erzeuge vorverarbeitete Datei gehe. Allerdings füge ich sie wahrscheinlich nicht in einem korrekten Modus zum Projekt hinzu, da ich sonst einen Linker-Fehler bekomme. – sblandin

+0

Sie müssen sie nicht hinzufügen. Sie werden während des Builds in Ihrem Release/Debug-Ordner erstellt, also suchen Sie sie dort nach. –

Antwort

3

Verwenden Sie IDE, um TLB-Informationen anzuzeigen.
Mit dieser Hilfe: How to: View Type Library Information

Bei IDE: View-> Objekt-Browser, klicken Sie auf "..." Edit Custom Component Set, durchsuchen Sie Ihre TLB-Datei und Hinzufügen von Informationen anzuzeigen.

Namespace bestätigen für.

+0

Sorry für das späte Feedback. Wenn ich die tlb-Datei im Objektbrowser öffne, sehe ich sie als eine Bibliothek, die einen einzelnen Namespace enthält, der eine Anzahl von Modulen enthält, die einige Funktionen gruppieren. Wenn ich die TLB in ein natives C++ Projekt importiere, erhalte ich einen Namensraum, der nur die Funktion enthält. Wie ich schon sagte, bevor ich einen Verweis auf die tlb in einem VBA-Projekt hinzufüge, kann ich die Funktionen aufrufen, aber in einem nativen C++ - Projekt erhalte ich einen Linker-Fehler. – sblandin

0

den Namespace verwenden, um den Linker Fehler zu beheben: Beispiel: #import "<>" raw_interfaces_only Namespace <>

Das wird das Problem

Verwandte Themen