Udostępnij za pośrednictwem


#Import dyrektywy (C++)

Szczególne C++

Można dołączyć informacje z biblioteki typów.Zawartość biblioteki typów jest konwertowany na klasy C++, głównie opisujące interfejsów COM.

#import "filename" [attributes]
#import <filename> [attributes]

Parametry

  • Nazwa pliku
    Określa biblioteki typów do zaimportowania.filenamemoże mieć jedną z następujących czynności:

    • Nazwa pliku, który zawiera biblioteki typów, takich jak plik .olb, .tlb lub .dll.Słowo kluczowe, pliku:, może poprzedzać nazwę każdego pliku.

    • Progid kontroli w bibliotece typów.Słowo kluczowe, progid:, może poprzedzać każdego progid.Na przykład:

      #import "progid:my.prog.id.1.5"
      

      Aby uzyskać więcej informacji na identyfikatory ProgID, zobacz określając identyfikator lokalizacji i numer wersji.

      Należy zauważyć, że podczas kompilacji z krzyżowe kompilatora na 64-bitowym systemie operacyjnym, kompilator będzie można odczytać tylko gałąź rejestru 32-bitowych.Można użyć macierzystego kompilatora 64-bitowych do budowania i zarejestrować biblioteki typów dla 64-bitowych.

    • Identyfikator biblioteki do biblioteki typów.Słowo kluczowe, Identyfikator biblioteki:, może poprzedzać każdy identyfikator biblioteki.Na przykład:

      #import "libid:12341234-1234-1234-1234-123412341234" version("4.0") lcid("9")
      

      Jeśli nie określisz wersji lub identyfikator lcid, zasady , które są zastosowane progid: są również stosowane do Identyfikator biblioteki:.

    • Plik wykonywalny (.exe).

    • Plik biblioteki (dll), zawierającą zasób biblioteki typu (na przykład .ocx).

    • Dokument złożony gospodarstwa biblioteki typów.

    • Innym formacie pliku, który może być rozumiane przez LoadTypeLib interfejsu API.

  • attributes
    Jeden lub więcej atrybuty #import.Oddzielne atrybutów ze spacjami lub przecinkami.Na przykład:

    #import "..\drawctl\drawctl.tlb" no_namespace, raw_interfaces_only
    

    - lub -

    #import "..\drawctl\drawctl.tlb" no_namespace raw_interfaces_only
    

Uwagi

Kolejność wyszukiwania o nazwie nazwa_pliku

Nazwa pliku opcjonalnie jest poprzedzony specyfikacji katalogu.Nazwa pliku, trzeba nadać nazwę istniejącego pliku.Różnica między dwie formy składni jest kolejność, w której preprocesora dla typu plików biblioteki podczas wyszukiwania ścieżka jest w pełni podany.

Składnia formularza

Akcja

Przytoczona formularza

Nakazuje preprocesora, aby wyszukać pliki biblioteki typu najpierw w katalogu, pliku, który zawiera #import instrukcji, a następnie w katalogach, niezależnie od plików, które zawierają (#include) tego pliku.Preprocesora przeszuka wzdłuż ścieżki, pokazane poniżej.

Formularz nawias kątowy

Nakazuje preprocesora, aby wyszukać pliki biblioteki typu wzdłuż ścieżki następujące:

  1. Ścieżki listy ścieżek zmiennej środowiska

  2. LIB listy ścieżek zmiennej środowiska

  3. Ścieżka określona przez /I (dodatkowe obejmują katalogów) opcję kompilatora, z wyjątkiem jego kompilator szuka odwołującej z innej biblioteki typów z biblioteki typów no_registry atrybut.

Określając identyfikator lokalizacji i numer wersji

Po określeniu progid, można również określić lokalizacji identyfikator i numer wersji programu.Na przykład:

#import "progid:my.prog.id" lcid("0") version("4.0)

Jeśli nie zostanie określony identyfikator lokalizacji, progid jest wybierany zgodnie z następującymi zasadami:

  • Jeśli istnieje tylko jeden identyfikator lokalizacji, że jedna jest używany.

  • Jeśli istnieje więcej niż jeden identyfikator lokalizacji, używany jest pierwsza z numerem wersji, 0, 9 lub 409.

  • Jeśli istnieje więcej niż jeden identyfikator lokalizacji, a żaden z nich nie jest 0, 9 lub 409, ostatnia z nich jest używana.

  • Jeśli numer wersji nie jest określony, jest używana najnowsza wersja.

Pliki nagłówków utworzonych przez przywóz

#importpowoduje utworzenie dwóch plików nagłówka, które odtworzyć zawartość biblioteki typów w kodzie źródłowym C++.Nagłówek podstawowy plik jest podobny do produkowanych przez kompilator Microsoft Interface Definition Language (MIDL), ale z dodatkowych generowanych przez kompilator kodu i danych.Nagłówek podstawowy plik ma taką samą nazwę jak biblioteki typów plus.Rozszerzenie TLH.Plik nagłówka pomocniczy ma taką samą nazwę jak biblioteka typów z.Rozszerzenie TLI.Zawiera implementacje dla funkcji generowanych przez kompilator elementów członkowskich i jest włączone (#include) w pliku nagłówkowym podstawowego.

W przypadku importowania właściwość dispinterface, która korzysta z byref parametrów #import nie będą generowane żadne __declspec (Właściwość) instrukcji dla tej funkcji.

Oba pliki nagłówka są umieszczane w katalogu wyjścia określonym przez opcję /Fo (nazwa obiektu pliku).Są one następnie odczytać i opracowane przez kompilator tak, jakby plik Nagłówek podstawowy został nazwany przez #include dyrektywy.

Następujące optymalizacje kompilatora pochodzą z #import dyrektywę:

  • Pliku nagłówka, podczas tworzenia, podany jest tym samym sygnatur czasowych jako biblioteki typów.

  • Gdy #import jest przetwarzane, kompilator najpierw sprawdza Jeśli nagłówek istnieje i jest aktualne.Jeśli tak, to nie trzeba być odtworzony.

#import Dyrektywy również uczestniczy w minimalnym Odbuduj i mogą być umieszczane w pliku nagłówkowym wstępnie skompilowana.Zobacz Tworzenie wstępnie skompilowana pliki nagłówków Aby uzyskać więcej informacji.

8etzzkb6.collapse_all(pl-pl,VS.110).gifPodstawowy typ biblioteki nagłówka pliku

Plik nagłówka biblioteki typu podstawowego składa się z siedmiu sekcje:

  • Standardowy nagłówek: składa się z komentarzami, #include instrukcji COMDEF.H (który definiuje niektóre standardowe makra używane w nagłówku) oraz inne informacje różne ustawienia.

  • Przesyła odniesienia i definicje TypeDef: składa się z deklaracji struktury, takie jak struct IMyInterface i definicje TypeDef.

  • Inteligentne deklaracje wskaźnik: klasy szablonu _com_ptr_t jest implementacja wskaźnik inteligentnych hermetyzuje wskaźników interfejsów i eliminuje konieczność wywołania AddRef, wersji, QueryInterface funkcji.Ponadto, ukrywa CoCreateInstance wywołania podczas tworzenia nowego obiektu COM.Ta sekcja używa instrukcji makro _COM_SMARTPTR_TYPEDEF do ustanowienia definicje typów interfejsów COM za specjalizacji szablonu z _com_ptr_t szablonu klasy.Na przykład dla interfejsu IMyInterface,.Plik TLH będzie zawierać:

    _COM_SMARTPTR_TYPEDEF(IMyInterface, __uuidof(IMyInterface));
    

    które kompilator będzie Rozwiń do:

    typedef _com_ptr_t<_com_IIID<IMyInterface, __uuidof(IMyInterface)> > IMyInterfacePtr;
    

    Typ IMyInterfacePtr mogą być następnie używane zamiast wskaźnika interfejsu surowego IMyInterface*.W związku z powyższym, istnieje potrzeba zadzwonić do różnych IUnknown funkcji elementów członkowskich

  • Parametr TypeInfo deklaracji: przede wszystkim składa się z definicji klas i inne elementy, które narażają elementów poszczególnych parametr typeinfo zwrócony przez ITypeLib:GetTypeInfo.W tej sekcji, każdy element typeinfo z biblioteki typów jest odzwierciedlona w nagłówka w formularzu zależne od TYPEKIND informacji.

  • Opcjonalne określanie identyfikatora GUID w starym stylu: zawiera inicjowania stałych identyfikatora GUID.Są to nazwy formularza CLSID_CoClass i IID_Interface, podobne do tych generowanych przez kompilator MIDL.

  • #includeInstrukcja dla nagłówka biblioteki typu pomocniczego.

  • Standardowa stopki: obejmuje obecnie #pragma pack(pop).

Wszystkie sekcje, z wyjątkiem pozycji Standardowy i stopka dodatkową sekcji są ujęte w przestrzeni nazw z jego nazwa określona przez biblioteki instrukcji w oryginalnym pliku IDL.Można użyć nazw z nagłówka biblioteki typu, przez jawne kwalifikacji, z nazwą obszaru nazw lub przez dołączenie następujących instrukcji:

using namespace MyLib;

natychmiast po #import instrukcji w kodzie źródłowym.

Obszar nazw, można pominąć przy użyciu no_namespace atrybutu #import dyrektywy.Jednakże pomijanie obszaru nazw może prowadzić do konfliktów nazw.Można również zmieniać obszaru nazw przez rename_namespace atrybut.

Kompilator zapewnia pełną ścieżkę do biblioteki typu zależności wymaganych przez biblioteki typów, który aktualnie przetwarza.Ścieżka jest napisane, w formie komentarzy, do nagłówka typu biblioteki (.TLH) aby kompilator generuje dla każdego przetwarzane biblioteki typów.

Jeśli biblioteki typów zawiera odwołania do typów zdefiniowanych w innych bibliotekach typu, a następnie.TLH pliku będzie zawierać komentarze następujące sortowania:

//
// Cross-referenced type libraries:
//
//  #import "c:\path\typelib0.tlb"
//

Rzeczywiste nazwy pliku w #import komentarz jest pełna ścieżka biblioteki odsyłaczami typ przechowywanej w rejestrze.Jeśli wystąpią błędy, które są ze względu na Brak definicji typu, sprawdzić komentarze na czele.TLH do Zobacz biblioteki typu zależnych, które może być konieczne być najpierw importowane.Prawdopodobne błędy są błędy składni (na przykład, C2143, C2146, C2321), C2501 (Brak Specyfikatory decl), lub C2433 ('inline' nie zezwala na zgłoszenie danych) podczas kompilacji.Plik TLI.

Należy określić, która z zależność komentarze nie są inaczej przewidziane przez system nagłówki, a następnie podaj #import dyrektywy w pewnym momencie przed #import biblioteki typów zależnych, aby naprawić błędy w dyrektywie.

Aby uzyskać więcej informacji, zobacz artykuł bazy wiedzy Knowledge Base "#import metody otoki może spowodować naruszenie zasad dostępu" (Q242527) lub "błędy kompilatora, korzystając z #import z danymi XML" (Q269194).Artykuły bazy wiedzy Knowledge Base można znaleźć nośnika biblioteki MSDN lub na https://support.microsoft.com/support/.

atrybuty #Import

#importOpcjonalnie można dołączyć jeden lub więcej atrybutów.Te atrybuty kompilatorowi modyfikować zawartość nagłówków biblioteki typów.Znakiem odwrotnej kreski ukośnej (\) symbolu można uwzględnić dodatkowe wiersze w jednym #import instrukcji.Na przykład:

#import "test.lib" no_namespace \
   rename("OldName", "NewName")

Aby uzyskać więcej informacji, zobacz #Import atrybuty (C++).

KONIEC C++ szczególne

Zobacz też

Informacje

Dyrektywy preprocesora

Obsługa modelu COM kompilatora