Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
C++ specifikus
Típustárból származó információk beépítésére szolgál. A típustár tartalma C++ osztályokká alakul, többnyire a COM-felületek leírásával.
Szemantika
#import "filename" [attribútumok]
<#importfájlnév> [attribútumok]
Paraméterek
fájlnév
Megadja az importálandó típustárat. A fájlnév a következő típusok egyike lehet:
Egy típustárat tartalmazó fájl neve, például .olb, .tlb vagy .dll fájl. A kulcsszó megelőzheti
file:az egyes fájlneveket.Egy vezérlő prototípusa a típustárban. A kulcsszó,
progid:megelőzheti az egyes progidokat. Például:#import "progid:my.prog.id.1.5"További információ a honosítási azonosító és a verziószám megadásáról.
Ha 32 bites keresztfordítót használ egy 64 bites operációs rendszeren, a fordító csak a 32 bites beállításjegyzék-hive-t tudja olvasni. Érdemes lehet a natív 64 bites fordítóval létrehozni és regisztrálni egy 64 bites típusú kódtárat.
A típustár kódtár-azonosítója. A kulcsszó megelőzheti
libid:az egyes kódtár-azonosítók. Például:#import "libid:12341234-1234-1234-1234-123412341234" version("4.0") lcid("9")Ha nem adja meg
version, vagylcida rendszer az alkalmazottprogid:is alkalmazza.libid:Végrehajtható (.exe) fájl.
Típustár-erőforrást (például .ocxot) tartalmazó kódtárfájl (.dll).
Egy típustárat tartalmazó összetett dokumentum.
A LoadTypeLib API által értelmezhető egyéb fájlformátumok.
Attribútumok
Egy vagy több #import attribútum. Szóközzel vagy vesszővel elválaszthatja az attribútumokat. Például:
#import "..\drawctl\drawctl.tlb" no_namespace, raw_interfaces_only
-vagy-
#import "..\drawctl\drawctl.tlb" no_namespace raw_interfaces_only
Megjegyzések
Fájlnév keresési sorrendje
a fájlnevet opcionálisan egy címtár-specifikáció előzi meg. A fájlnévnek el kell neveznie egy meglévő fájlt. A két szintaxisűrlap közötti különbség az a sorrend, amelyben az előfeldolgozó megkeresi a típustárfájlokat, ha az elérési út hiányosan van megadva.
| Szintaxisűrlap | Tevékenység |
|---|---|
| Idézett űrlap | Arra utasítja az előfeldolgozót, hogy először a #import utasítást tartalmazó fájl könyvtárában keresse meg a típustárfájlokat, majd az adott fájlt tartalmazó fájlok#include könyvtáraiban. Az előfeldolgozó ezután az alábbi útvonalak mentén keres. |
| Szögletes zárójel űrlap | Utasítja az előfeldolgozót, hogy keressen típustárfájlokat az alábbi útvonalak mentén: 1. A PATH környezeti változó elérési útjának listája2. A LIB környezeti változó elérési útjának listája3. A /I fordító által megadott elérési út, kivéve, hogy a fordító olyan típustárat keres, amely egy másik, no_registry attribútummal rendelkező típustárból lett hivatkozva. |
Adja meg a honosítási azonosítót és a verziószámot
Ha proxyt ad meg, megadhatja a honosítási azonosítót és a progid verziószámát is. Például:
#import "progid:my.prog.id" lcid("0") version("4.0)
Ha nem ad meg honosítási azonosítót, a rendszer a következő szabályok szerint választ ki egy proxyt:
Ha csak egy honosítási azonosító van, azt használja a rendszer.
Ha egynél több honosítási azonosító van, akkor a rendszer az elsőt használja a 0-s, a 9-es vagy a 409-es verziószámmal.
Ha egynél több honosítási azonosító van, és egyik sem 0, 9 vagy 409, akkor a rendszer az utolsót használja.
Ha nem ad meg verziószámot, a rendszer a legújabb verziót használja.
Importálással létrehozott fejlécfájlok
#import létrehoz két fejlécfájlt, amelyek a C++ forráskódban rekonstruálják a típustár tartalmát. Az elsődleges fejlécfájl hasonló a Microsoft Interface Definition Language (MIDL) fordító által előállítotthoz, de további fordító által generált kóddal és adatokkal. Az elsődleges fejlécfájl alapneve megegyezik a típustár nevével, valamint egy . TLH-bővítmény. A másodlagos fejlécfájl alapneve megegyezik a típustár nevével, és egy . TLI-bővítmény. A fordító által létrehozott tagfüggvények implementációit tartalmazza, és (#include) szerepel az elsődleges fejlécfájlban.
Ha paramétereket használó byref dispinterface tulajdonságot importál, #import nem hoz létre __declspec(tulajdonság) utasítást a függvényhez.
Mindkét fejlécfájl a /Fo (névobjektumfájl) beállítás által megadott kimeneti könyvtárba kerül. Ezután a fordító felolvassa és lefordítja őket, mintha az elsődleges fejlécfájlt egy #include irányelv nevezte volna el.
Az alábbi fordítóoptimalizálások #import irányelvvel járnak:
A fejlécfájl létrehozásakor ugyanazt az időbélyeget kapja, mint a típustár.
A #import feldolgozásakor a fordító először ellenőrzi, hogy létezik-e a fejléc, és up-to-date. Ha igen, akkor nem kell újra létrehozni.
A #import irányelv minimális újraépítésben is részt vesz, és egy előre összeállított fejlécfájlba helyezhető. További információ: Előre összeállított fejlécfájlok létrehozása.
Elsődleges típusú kódtár fejlécfájlja
Az elsődleges típusú kódtár fejlécfájlja hét szakaszból áll:
Címsorkazán: Megjegyzésekből,
#includea COMDEF utasításából áll. H (amely meghatároz néhány, a fejlécben használt standard makrót) és egyéb egyéb beállítási információkat.Továbbítási hivatkozások és típusdefek: Olyan struktúradeklarációkból áll, mint például
struct IMyInterfacea typedefs.Intelligens mutató deklarációi: A sablonosztály
_com_ptr_tegy intelligens mutató. Beágyazza az illesztőmutatókat, és szükségtelenné teszi a hívás ,AddRefésReleasea függvények meghívásátQueryInterface. Emellett elrejti aCoCreateInstancehívást egy új COM-objektum létrehozásakor. Ez a szakasz a makróutasítást_COM_SMARTPTR_TYPEDEFhasználja a COM-felületek típusdefinicióinak létrehozására a _com_ptr_t sablonosztály sablon specializációiként. Például az interfészIMyInterfaceesetében a . A TLH-fájl a következőket tartalmazza:_COM_SMARTPTR_TYPEDEF(IMyInterface, __uuidof(IMyInterface));a fordító a következőre fog kiterjeszteni:
typedef _com_ptr_t<_com_IIID<IMyInterface, __uuidof(IMyInterface)> > IMyInterfacePtr;A típus
IMyInterfacePtrezután a nyers felület mutatójaIMyInterface*helyett használható. Ezért nem szükséges meghívni a különbözőIUnknowntagfüggvényeketTypeinfo deklarációk: Elsősorban osztálydefiníciókból és egyéb elemekből áll, amelyek a visszaadott
ITypeLib::GetTypeInfoegyes typeinfo elemeket tartalmazzák. Ebben a szakaszban a típustár minden typeinfoja megjelenik az információtól függőTYPEKINDűrlap fejlécében.Választható régi stílusú GUID-definíció: A nevesített GUID-állandók inicializálását tartalmazza. Ezek a nevek a MIDL-fordító által létrehozottakhoz hasonlóan rendelkeznek az űrlappal
CLSID_CoClassésIID_Interfacea névvel.#includeutasítás a másodlagos típusú kódtár fejlécéhez.Lábléc kazánlemez: Jelenleg is
#pragma pack(pop).
Az összes szakasz, kivéve a címsorkazánlemez és az élőláb kazánlemez szakaszát, egy névtérben van elhelyezve, amelynek nevét az library eredeti IDL-fájlban szereplő utasítás határozza meg. A típustár fejlécéből származó neveket explicit minősítéssel használhatja a névtérnév használatával. Vagy a következő utasítást is belefoglalhatja:
using namespace MyLib;
közvetlenül a forráskód #import utasítása után.
A névtér a #import irányelv no_namespace) attribútumával mellőzhető. A névtér letiltása azonban névütközésekhez vezethet. A névteret a rename_namespace attribútum is átnevezheti.
A fordító a jelenleg használt típustár által igényelt típustár-függőségek teljes elérési útját biztosítja. Az elérési utat megjegyzések formájában írja be a kódtár fejlécébe (. TLH), amelyet a fordító minden feldolgozott típustárhoz létrehoz.
Ha egy típustár más típustárakban definiált típusokra mutató hivatkozásokat tartalmaz, akkor a . A TLH-fájl a következő típusú megjegyzéseket tartalmazza:
//
// Cross-referenced type libraries:
//
// #import "c:\path\typelib0.tlb"
//
A #import megjegyzés tényleges fájlneve a kereszthivatkozású típustár teljes elérési útja a beállításjegyzékben tárolt módon. Ha hiányzó típusdefiníciók által okozott hibákba ütközik, ellenőrizze a megjegyzéseket a . TLH annak megtekintéséhez, hogy mely függő típusú kódtárakat kell először importálni. Valószínű hibák lehetnek szintaxishibák (például C2143, C2146, C2321), C2501 (hiányzó deklarátorok) vagy C2433 (az adatdeklarációban nem engedélyezett beágyazott) a fordítás során. TLI-fájl.
A függőségi hibák megoldásához állapítsa meg, hogy a függőségi megjegyzések közül melyiket nem adják meg másként a rendszerfejlécek, majd adjon meg egy #import irányelvet a függő típusú kódtár #import irányelve előtt.
#import attribútumok
#import egy vagy több attribútumot is tartalmazhatnak. Ezek az attribútumok azt jelzik a fordítónak, hogy módosítsa a típustár fejléceinek tartalmát. A fordított perjel (\) szimbólummal további sorokat is felvehet egyetlen #import utasításba. Például:
#import "test.lib" no_namespace \
rename("OldName", "NewName")
További információ: #import attribútumok.
END C++ specifikus