2013-03-13 50 views
5

我有一個tlb文件,其中包含一些我需要使用的函數聲明。如何在本地C++項目中使用tlb文件

如果我使用

#import "type_library.tlb" 

我可以correclty從我的代碼中引用的函數:

tlb_namespace::required_function(); 

但是,當我編譯項目鏈接說tlb_namespace :: required_function是一個未解決的外部符號。

我該如何成功構建這種類型的項目?

編輯

我曾經在一個虛擬VBA項目的訪問使用相同的類型庫。我已經添加了對類型庫的引用,並且我注意到正確調用了類型庫中包含的某些功能。但其中一些不是。 VBA說它無法在相關的DLL中找到它們的入口點。

這可以解釋構建C++應用程序時無法解析的外部符號嗎?

我也注意到,失敗函數在TLB中這樣宣稱:

UPPER_function_name 

,但在DLL中的聲明如下:

Upper_function_name 

可這是問題?

是否有可能解決這種類型的錯誤,直接修改二進制tlb文件或DLL?

+0

是'#進口 「type_library.tlb」 '在你的項目中這個tlb唯一的#import指令。它是否與函數調用駐留在相同的cpp中?如何在生成的.tlh和.tli文件中定義'required_function'? – 2013-03-13 10:18:04

+0

@ZdeslavVojkovic現在的項目是一個非常簡單的項目,因此#import只是一個,它駐留在調用的同一個.cpp文件中。我試圖生成.tlh和.tli文件......只有當我去項目屬性\預處理器生成預處理文件時才顯示它們。但是,我可能不會將它們以正確的模式添加到項目中,因爲如果我這樣做,我會得到另一個鏈接器錯誤。 – sblandin 2013-03-13 10:54:08

+0

您不必添加它們。它們將在構建發佈/調試文件夾期間創建,因此請在那裏查找它們。 – 2013-03-13 11:01:42

回答

3

使用IDE查看TLB信息。
使用此幫助:How to: View Type Library Information

在IDE:視圖 - >對象瀏覽器,點擊「...」編輯自定義組件集,瀏覽你的TLB文件,並添加到瀏覽信息。

確認用於的命名空間。

+0

對於遲到的反饋意見很抱歉。如果我在對象瀏覽器中打開tlb文件,我將它看作一個包含單個名稱空間的庫,其中包含許多將某些函數分組的模塊。當我在本地C++項目中導入tlb時,我得到一個僅包含函數的名稱空間。正如我之前所說的在VBA項目中添加對tlb的引用允許我調用函數,但是在本機C++項目中,我會收到鏈接器錯誤。 – sblandin 2013-03-22 11:09:10

0

使用的命名空間來解決連接錯誤: 例如:#進口 「<>」 raw_interfaces_only 使用命名空間<>

這將解決此問題

相關問題