#import 指令 (C++)
已用于合并類型庫(kù)中的信息。該類型庫(kù)的內(nèi)容轉(zhuǎn)換為C++類,主要描述COM接口。
? #import "filename" [attributes]
? #import <filename> [attributes]
例如:
? #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")【這是ADO訪問數(shù)據(jù)庫(kù)方式需要用的】
下面對(duì)上述理論參數(shù)進(jìn)行說(shuō)明:
? filename---指定要導(dǎo)入的類型庫(kù)。內(nèi)容可以是:
1.包含一個(gè)類型庫(kù)的文件的名稱,如.olb、.tlb或.dll文件。如上面例子中的msado15.dll。
? ? ? ? 2.類型庫(kù)中的空間的progid。
? ? ? ? ? 注意:當(dāng)使用在64 bits操作系統(tǒng)的交叉編譯器編譯的時(shí)候,該編譯器可以只讀取32 bits注冊(cè)表配置。建議使用本地64 bits編譯器編譯,注冊(cè)64 bits類型共享庫(kù)。
? ? ? ? 3.類型庫(kù)的庫(kù)ID。
? 例如:#import "libid:12341234-1234-1234-1234-123412341234" version("4.0") lcid("9")
? ? ? ? ? ? ? ? 如果不指定版本或lcid,適用于progid的規(guī)則也是用與libid。
? ? ? ? 4.可執(zhí)行(.exe)文件。
? ? ? ? 5.包含類型庫(kù)資源(例如.ocx)的庫(kù)(.dll)文件。
? ? ? ? 6.保留類型庫(kù)的符合文件。
? ? ? ? 7.可由“LoadTypeLib”API理解的其他文件形式。
? ? attributes---一個(gè)或多個(gè)#import特性。用空格或逗號(hào)分隔每個(gè)特性。
? ? ? 例如:
? #import "..\drawct\drawctl.tlb" no_namespace,raw_interface_only
? ? ?OR
? ? ? ? ? #import "..\drawct\drawctl.tlb" no_namespace raw_interfaces_only
?備注:
filename 帶引號(hào)的形式 ?指示預(yù)處理器首先在包含#import語(yǔ)句文件的目錄中,然后再內(nèi)容中包括(#include)該文件的任何文件的目錄中查找類型庫(kù)文件。預(yù)處理器然后沿如下所示的路徑搜索。
? ? ? ? ? ? ? ? ?帶尖括號(hào)形式 ? 指示預(yù)處理器沿下列路徑搜索類型庫(kù)文件:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1. “PATH”環(huán)境變量路徑列表
?2. “LIB”環(huán)境變量路徑列表
3. ?由/I(附加包含目錄)編譯器選項(xiàng)指定的路徑,但該編譯器搜索no_registry 屬性的另一種類型庫(kù)引用的類型庫(kù)。
? #import 創(chuàng)建兩個(gè)標(biāo)題文件來(lái)重新構(gòu)造C++源代碼內(nèi)的類型庫(kù)內(nèi)容。主要標(biāo)頭文件類似于生產(chǎn)有Microsoft“接口定義語(yǔ)言”(MIDL)編譯器生成的文件,但是是使用附加的編譯器生成的代碼。“主要標(biāo)頭文件”具有與類庫(kù)相同的基名稱以及.TLH擴(kuò)展。次要頭文件具有與類庫(kù)相同的基名稱,并包含有.TLH擴(kuò)展。它在主要頭文件中包含編譯器生成的成員函數(shù)的實(shí)現(xiàn)并包含(#include)。
? 兩個(gè)標(biāo)題文件都位于/Fo(名稱的對(duì)象文件)選項(xiàng)指定的輸出目錄中。然后它們讀取由編譯器編譯,就像主要頭文件由#include指令命名。
? 以下編譯程序優(yōu)化隨#import指令一起:
1.創(chuàng)建頭文件時(shí),給定相同時(shí)間戳和類型庫(kù)。
2.處理#import時(shí),編譯器首先檢查標(biāo)題是否存在并且最新。如果是,則不需要重新創(chuàng)建。
? ?#import指令也可參與最小重新生成并能放置在預(yù)編譯頭文件中。
? ?編譯器為當(dāng)前進(jìn)程所需要的任何類型的類型依賴庫(kù)提供完成路徑。路徑以注釋形式寫入編譯器為每個(gè)以已處理的類型庫(kù)生成的類型庫(kù)表頭(.TLH)。
? ?如果類型庫(kù)包含對(duì)其它類型中定義的類型的引用,則.TLH文件將包含以下排序的注釋:
//Cross-refferenced type libraries:
//#import "c:\path\typelib0.tlb"
? ?#import注釋的實(shí)際文件名為交叉引用類型庫(kù)的完整路徑,存儲(chǔ)在注冊(cè)表。如果由于缺少類型定義遇到錯(cuò)誤,請(qǐng)檢查在.TLH頭的注釋來(lái)看可能需要先導(dǎo)入那個(gè)獨(dú)立類型庫(kù)。
? ?首先,必須確定獨(dú)立注釋中的哪一項(xiàng)并非由系統(tǒng)標(biāo)頭提供,然后在獨(dú)立類型共享庫(kù)的#import指令前的某個(gè)的地方提供#import指令,已解決錯(cuò)誤。
? ? #import 可以選擇包含一個(gè)或多個(gè)特性。這些特性通知編譯器修改類型庫(kù)標(biāo)頭的內(nèi)容。杠(\)符號(hào)可以用來(lái)在單個(gè)#import語(yǔ)句中包含附加行。即起一種連接作用(和linux內(nèi)核代碼方式相似)
如:
#import “test.lib” no_namespace \
? rename("OldName", "NewName")
總結(jié)
以上是生活随笔為你收集整理的#import 指令 (C++)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k8s chart
- 下一篇: 语音之家SOTA | TIOBE 滚动测