2011-12-06 52 views
2

我有一個程序,它附帶一個.tlb文件,用我自己的C++程序訪問某些函數/對象(讀取變量等)。我做了搜索,進口與.tlb文件:獲取導入的函數/對象.tlb

#import "MyLib.tlb" named_guids no_namespace 

我還可以通過使用從OLEView.exe這類的LIBID(PROGID不工作)導入。

即使我得到一些警告(如下圖),我的程序仍然運行:

C4278 ['TextOut', 'CreateEvent', 'DeleteFile'] is already a macro; use the 'rename' qualifier 

但是...我怎麼能現在所獲得的功能/對象的訪問? 對不起,我是初學者,請耐心等待。 它以某種方式與IDispatch一起工作嗎?我是否需要導入更多的dll或是否需要更多#include指令?

我正在使用Visual C++ 2008 Express。

-
編輯:好的抱歉,我已經有權訪問對象的標題(我在自動完成中看到「應用程序」),但我不知道如何獲取對象。

Object Overview

而且我想我找到了相關wikipedia article

+0

http://books.google.com/books?id=ImlftNNqn6MC&pg=PA168&lpg=PA168&dq=_com_ptr_t&source=bl&ots=pjGZXG5fNj&sig=KRzrG5vV1TWKQ43vjWR9w_4eZ8g&hl= en&ei = cRfeTqnyCeXo2AXrtJSxBQ&sa = X&oi = book_result&ct = result&resnum = 1&ved = 0CCQQ6AEwADgK#v = onepage&q = _com_ptr_t&f = false –

回答

2

導入類型庫爲您提供了該庫的所有接口和標識符的說明。通常你不應該包含任何頭文件。您應該只是正常創建使用COM智能指針這些接口和調用它們的方法:

CComPtr pInterface; 
pInterface.CoCreateInstance(__uuidof("ClassNameFromTLB")); 
pInterface->CallMethod(); 
+0

感謝您的回答!我是否需要ATL for CComPtr,因爲我有MSVC++ 2008 Express Edition,並且您的代碼對我無效。你能解釋一下嗎? – Blubb

+1

使用#import自動生成的'_com_ptr_t'派生的智能指針類型。如果可用類型庫,則可用Express和通常更好的解決方案。 –

+0

謝謝@HansPassant提示和鏈接。但是我很難理解它。我應該這樣做嗎?:'_COM_SMARTPTR_TYPEDEF(Application,__uuidof(Application));'然後:'_com_ptr_t :: CreateInstance(Application);'那樣的東西? *尷尬* – Blubb