2013-05-21 21 views
0

我沒有太多使用COM的經驗,並想知道是否有人知道我必須提供的最少量的信息#import dll到一個cpp文件(這將是用於製作一個dll)。根據MDSN(http://msdn.microsoft.com/en-us/library/8etzzkb6(v=vs.80).aspx),我需要包含一個類型庫資源,如.ocx文件。這是甚至對於Microsoft共享DLL(例如mso.dll)的情況?另外,我可以使用哪些其他類型的圖書館資源?在微軟的共享DLL上使用#import指令

從我到目前爲止所收集的信息來看,我只需要提供足夠的信息給MIDL,以便以正確的方式形成與dll的接口(這似乎是COM的本質)。

+0

#import指令的MSDN文檔適用於任何由Microsoft提供或不提供的類型庫。一些DLL/OCX嵌入了TLB,其他一些則沒有。 #import與mso.dll一起工作,例如:http://support.microsoft.com/kb/259298/en-us –

+0

因此,如果該DLL不嵌入TLB,那麼你是說#import不起作用?或者這是否簡化了編譯器的工作?順便說一句,TLB如何嵌入到dll中? – OOhay

+0

它不是。您必須運行Tlbexp.exe以從.NET程序集生成類型庫。然後你可以#import。 –

回答

0

在你列出的關鍵句子的鏈接是「#import創建兩個頭文件,用C++源代碼重建類型庫內容」。當您導入MSO.DLL時,您正在將類型庫導入到項目中(而不是您的cpp文件),並創建必要的COM接口定義。所以你不需要提供額外的信息。

但可能還有其他文件需要#import才能使用Office應用程序,具體取決於您嘗試執行的操作。

+0

」轉換成cpp文件「對不起,口誤,正試圖傳達我將使用我的cpp文件中定義的數量,但是你說得對,不完全正確。 – OOhay

+0

我正在使用其他的DLL,你說得對。 – OOhay

+0

#import關於#import創建頭文件的句子雖然會成功執行#import,但至少這是我讀取它的方式。我的意思是如果dll是用C編譯的(沒有名稱修改),編譯器如何從導出的函數中提取接口信息? – OOhay