Megosztás a következőn keresztül:


#import irányelv (C++)

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 megversion, vagy lcida rendszer az alkalmazott progid: 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ája
2. A LIB környezeti változó elérési útjának listája
3. 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, #include a 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 IMyInterface a typedefs.

  • Intelligens mutató deklarációi: A sablonosztály _com_ptr_t egy intelligens mutató. Beágyazza az illesztőmutatókat, és szükségtelenné teszi a hívás , AddRefés Release a függvények meghívásátQueryInterface. Emellett elrejti a CoCreateInstance hívást egy új COM-objektum létrehozásakor. Ez a szakasz a makróutasítást _COM_SMARTPTR_TYPEDEF haszná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ész IMyInterfaceeseté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 IMyInterfacePtr ezután a nyers felület mutatója IMyInterface*helyett használható. Ezért nem szükséges meghívni a különböző IUnknown tagfüggvényeket

  • Typeinfo 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 és IID_Interfacea névvel.

  • #include utasí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

Lásd még

Előfeldolgozási irányelvek
A Compiler COM támogatása