2013-03-13 15 views
5

Ho un file tlb che contiene alcune dichiarazioni di funzione che devo usare.Come utilizzare i file tlb in un progetto C++ nativo

Se uso

#import "type_library.tlb" 

posso correclty riferimento alla funzione dal mio codice:

tlb_namespace::required_function(); 

Ma quando compilo il progetto il linker dice che tlb_namespace :: required_function è un simbolo esterno non risolto .

Come posso costruire con successo questo tipo di progetto?

EDIT:

Ho usato la stessa libreria dei tipi in un progetto di Access Dummy VBA. Ho aggiunto il riferimento alla libreria dei tipi e ho notato che alcune delle funzioni contenute nella libreria dei tipi sono chiamate correttamente. Ma alcuni di loro non lo sono. VBA dice che non è possibile individuare il loro punto di ingresso nella DLL correlata.

Questo può spiegare il simbolo esterno non risolto durante la creazione dell'app C++?

Ho anche notato che la funzione non riuscendo sono dichiarati nel TLB come questo:

UPPER_function_name 

ma nel dll sono dichiarate in questo modo:

Upper_function_name 

Può essere questo il problema?

È possibile risolvere questo tipo di errore modificando direttamente il file binario o la DLL?

+0

è '#import "type_library.tlb" 'l'unica direttiva #import per questo tlb nel tuo progetto. Risiede nello stesso cpp della chiamata di funzione? Come viene definito 'required_function' nei file .tlh e .tli generati? –

+0

@ZdeslavVojkovic Il progetto per ora è molto semplice quindi #import è solo uno e risiede nello stesso file .cpp della chiamata. Ho provato a generare file .tlh e .tli ... compaiono solo se vado nella proprietà del progetto \ Preprocessore Genera file preelaborato. Tuttavia probabilmente non li aggiungo in una modalità corretta al progetto perché se lo faccio ottengo un altro errore di linker. – sblandin

+0

non è necessario aggiungerli. Verranno creati durante la compilazione nella cartella di rilascio/debug, quindi cercali qui. –

risposta

3

Utilizzare IDE per visualizzare le informazioni TLB.
Utilizzare questo aiuto: How to: View Type Library Information

A IDE: Visualizza-> Visualizzatore oggetti, fare clic su "..." Modifica personalizzato Set Component, sfogliare il file TLB e Aggiungi per visualizzare le informazioni.

Confermare lo spazio dei nomi utilizzato per.

+0

Ci scusiamo per il feedback tardivo. Se apro il file tlb nel browser degli oggetti, lo vedo come una libreria contenente un singolo spazio dei nomi che contiene un numero di moduli che raggruppano alcune funzioni. Quando I # importa il tlb in un progetto C++ nativo, ottengo uno spazio dei nomi che contiene solo la funzione. Come ho detto prima, aggiungere un riferimento al tlb in un progetto VBA mi permette di chiamare le funzioni, ma in un progetto C++ nativo ottengo l'errore linker. – sblandin

0

utilizzare lo spazio dei nomi per risolvere l'errore di linker: esempio: #import "<>" raw_interfaces_only utilizzando namespace <>

questo risolverà il problema

Problemi correlati