Aracılığıyla paylaş


#import Yönergesi (C++)

C++'ya Özel

Bir tür kitaplığından bilgileri birleştirmek üzere kullanılır.Tür kitaplığının içeriği çoğunlukla COM arabirimlerini açıklayan C++ sınıflarına dönüştürülür.

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

Parametreler

  • filename
    İçeri aktarılacak tür kitaplığını belirtir.filename aşağıdaki değerlerden biri olabilir:

    • .olb, .tlb, or .dll dosyası gibi bir tür kitaplığı içeren bir dosyanın adı.file: anahtar sözcüğü her dosya adının önüne gelebilir.

    • Tür kitaplığında bir denetimin program kimliği.progid: anahtar sözcüğü her program kimliğinin önüne gelebilir.Örne?in:

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

      Progid'ler hakkında daha fazla bilgi için bkz. Yerelleştirme Kimliğini ve Sürüm Numarasını Belirtme.

      64-Bit işletim sisteminde çapraz bir derleyici ile derleme yaparken, derleyicinin yalnızca 32 bit kayıt defteri kovanını okuyabileceğini unutmayın.64 bit tür kitaplığı oluşturmak ve kaydetmek için yerel 64 bit derleyiciyi kullanmak isteyebilirsiniz.

    • Tür kitaplığının kitaplık kimliği.libid: anahtar sözcüğü her kitaplık kimliğinin önüne gelebilir.Örne?in:

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

      Sürüm veya lcid belirtmezseniz, progid: için uygulanan kurallarlibid: için de uygulanır.

    • Yürütülebilir (.exe) dosya.

    • Tür kitaplığı kaynağı (.ocx gibi) içeren kitaplık (.dll) dosyası.

    • Tür kitaplığını kullanımda tutan bir bileşik belge.

    • Diğer herhangi bir dosya biçimi, LoadTypeLib API'si tarafından anlaşılabilir.

  • attributes
    Bir veya daha fazla #import özniteliği.Öznitelikleri boşluk veya virgülle ayırın.Örne?in:

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

    -veya-

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

Notlar

Dosya adı için Arama Sırası

Dosya adı öncesinde isteğe bağlı olarak bir dizin belirtimi bulunur.Dosya adı varolan bir dosya adı olmalıdır.İki sözdizimi biçimi arasındaki fark, yol tam olarak belirtilmediğinde önişlemcinin tür kitaplığı dosyalarını arama sırasıdır.

Söz dizimi biçimi

Eylem

Tırnak içinde biçim

Önişlemciye tür kitaplığı dosyaları için önce #import deyimini içeren dosyanın dizinine bakması ve daha sonra söz konusu dosyayı içeren (#include) tüm dosyaların dizinlerine bakması talimatı verir.Önişlemci sonra aşağıda gösterilen yollarda arama yapar.

Açılı ayraç biçimi

Önişlemciye aşağıdaki yollarla birlikte tür kitaplığı dosyalarını araması talimatı verir:

  1. PATH ortam değişkeni yol listesi

  2. LIB ortam değişkeni yol listesi

  3. Derleyicinin no_registry içeren başka bir kitaplık türünden başvuru yapılan bir tür kitaplığı arıyor olması dışında, /I (ek dizinler dahil) derleyici seçeneği tarafından belirtilen yol.

Yerelleştirme Kimliği ve Sürüm Numarasını Belirtme

Bir progid belirttiğinizde, progid için yerelleştirme kimliği ve sürüm numarası da belirtebilirsiniz.Örne?in:

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

Bir yerelleştirme kimliği belirtmezseniz, aşağıdaki kurallara göre progid seçilir:

  • Yalnızca bir yerelleştirme kimliği varsa, bu kullanılır.

  • Birden fazla yerelleştirme kimliği varsa sürüm numarası 0, 9 veya 409 olan kullanılır.

  • Birden fazla yerelleştirme kimliği varsa ve bunlardan hiçbiri 0, 9 veya 409 değilse, sonuncu kullanılır.

  • Bir sürüm numarası belirtmezseniz en yeni sürüm kullanılır.

İçe Aktarma Tarafından Oluşturulan Üstbilgi Dosyaları

#import, C++ kaynak kodunda tür kitaplığı içeriklerini yeniden oluşturan iki üstbilgi dosyası oluşturur.Birincil üstbilgi dosyası Microsoft Arabirim Tanımı Dili (MIDL) derleyici tarafından oluşturulana benzer ancak derleyicinin ürettiği ek kod ve veriler içerir.Birincil üstbilgi dosyası tür kitaplığı ile aynı temel ada ve artı bir .TLH uzantısına sahiptir.İkincil üstbilgi dosyası tür kitaplığı ile aynı temel ada ve artı bir .TLI uzantısına sahiptir.Derleyici tarafından oluşturulan üye işlevlerin uygulanmasını içerir ve birincil üstbilgi dosyasına dahildir (#include).

Byref parametrelerini kullanan bir kaynak görüntüleme arabirimi özelliği içe aktarılıyorsa, #import, işlev için __declspec(özellik) deyimini üretmez.

Her iki başlık dosyası, /Fo (ad nesnesi dosyası) seçeneğinin belirlediği çıktı dizinine yerleştirilir.Bunlar birincil üstbilgi dosyası #include yönergesi tarafından adlandırılmış gibi derleyici tarafından okunur ve derlenir.

Aşağıdaki derleyici iyileştirmeleri #import yönergesi ile gelir:

  • Üstbilgi dosyası oluşturulduğunda, tür kitaplığı ile aynı zaman damgası verilir.

  • #import işlendiğinde derleyici ilk olarak başlığın mevcut ve güncel olup olmadığını denetler.Evet ise, yeniden oluşturulması gerekmez.

#import yönergesi ayrıca en az yeniden oluşturmada yer alabilir ve ön derlenmiş bir üstbilgi dosyasına yerleştirilebilir.Daha fazla bilgi için bkz. Ön Derlenmiş Üstbilgi Dosyası Oluşturma.

Birincil Tür Kitaplığı Üstbilgi Dosyası

Birincil tür kitaplığı üstbilgi dosyası yedi bölümden oluşur:

  • Üstbilgi demirbaş: Açıklamalardan, COMDEF.H için #include ifadesi (üstbilgide kullanılan bazı standart makroları tanımlar) ve diğer çeşitli kurulum bilgilerinden oluşur.

  • İleri başvurular ve tür tanımları: struct IMyInterface gibi yapı bildirimlerinden ve tür tanımlarından oluşur.

  • Akıllı işaretçi bildirimleri: Şablon sınıfı _com_ptr_t, arabirim işaretçilerini kapsayan ve AddRef, Release, QueryInterface işlevlerini çağırma ihtiyacını ortadan kaldıran bir akıllı işaretçi uygulamasıdır.Buna ek olarak, yeni bir COM nesnesi oluşturulurken CoCreateInstance çağrısını gizler.Bu bölüm _COM_SMARTPTR_TYPEDEF makro deyimini kullanarak COM arabirimlerinin typedef öğelerini _com_ptr_t şablon sınıfının şablon özelleştirmeleri yapar.Örneğin, IMyInterface arabirimi için .TLH dosyası şunları içerir:

    _COM_SMARTPTR_TYPEDEF(IMyInterface, __uuidof(IMyInterface));
    

    bunu derleyici şu şekilde genişletir:

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

    Ardından IMyInterfacePtr türü ham arabirim işaretçisi IMyInterface* yerine kullanılabilir.Sonuç olarak, çeşitli IUnknown üye işlevlerini çağırmaya gerek yoktur.

  • Typeinfo bildirimleri: Temel olarak ITypeLib:GetTypeInfo tarafından döndürülen bireysel typeinfo öğelerini gösteren sınıf tanımlarını ve diğer öğeleri içerir.Bu bölümde, tür kitaplığındaki her typeinfo, TYPEKIND bilgisinden bağımsız olarak üstbilgiye yansıtılır.

  • İsteğe bağlı eski tip GUID tanımı: Adlandırılmış GUID sabitlerinin başlatmalarını içerir.Bunlar CLSID_CoClass ve IID_Interface formlarının adlarıdır ve MIDL derleyicisi tarafından oluşturulanlara benzer.

  • İkinci tür kitaplık üstbilgisi için #include deyimi.

  • Altbilgi demirbaş: Şu anda #pragma pack(pop) içeriyor.

Başlık demirbaş ve altbilgi demirbaş bölümleri hariç, tüm bölümler özgün IDL dosyasındaki kitaplık deyimi tarafından belirlenen adıyla bir ad alanının içinde yer alır.Ad alanı adı ile açık bir nitelik olarak ya da aşağıdaki ifade dahil olmak üzere tür kitaplığı başlığındaki adları kullanabilirsiniz:

using namespace MyLib;

kaynak koddaki #import ifadesinden hemen sonra.

Ad alanı #import yönergesinin no_namespace özniteliği kullanılarak bastırılabilir.Ancak ad alanının gizlenmesi ad çakışmalarına neden olabilir.Ad alanı ayrıca rename_namespace özniteliği ile yeniden adlandırılabilir.

Derleyici o anda işlediği tür kitaplığının gerektirdiği her tür kitaplığı bağımlılığının tam yolunu sağlar.Yol, derleyicinin işlenen her tür kitaplığı için oluşturduğu tür kitaplığı üstbilgisine (.TLH) açıklama formunda yazılır.

Bir tür kitaplığı diğer tür kitaplıklarında tanımlanan türlere başvuru içeriyorsa, .TLH dosyası aşağıdaki sıralamada açıklamaları ekler:

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

#import açıklamasındaki gerçek dosya adı, çapraz başvurulan tür kitaplığının kayıt defterinde saklanan şekilde tam yoludur.Eksik tür tanımlarından kaynaklanan hatalarla karşılaşırsanız, hangi bağımlı tür kitaplıklarının önce içe aktarılması gerekebileceğini görmek için .TLH dosyasının sonunda yer alan açıklamalara göz atın..TLI dosyası derlenirken olası hatalar, (örneğin, C2143, C2146, C2321), C2501 (eksik bildirim belirticileri) veya C2433 (veri bildiriminde 'inline' için izin verilmemesi) sözdizimi hatalarıdır.

Önce sistem üstbilgileri tarafından sağlanmayan bağlılık açıklamalarını belirlemeniz, ardından hataları çözmek için #import yönergesini bağımlı tür kitaplığından önce #import belirtmeniz gerekir.

Daha fazla bilgi için Bilgi Bankası'ndaki "#import Sarıcı Yöntemleri Erişim İhlaline Neden Olabilir" (Q242527) veya "XML ile #import Kullandığınızda Meydana Gelen Derleyici Hataları" (Q269194) makalelerine bakın.MSDN Kitaplığında veya https://support.microsoft.com/?ln=tr sitesinde Bilgi Tabanı makalelerini bulabilirsiniz.

#import Öznitelikleri

#import isteğe bağlı olarak bir veya daha fazla öznitelik içerebilir.Bu öznitelikler, derleyiciye tür kitaplığı başlıklarının içeriğini değiştirmesini söyler.Ters eğik çizgi (\) sembolü, tek bir #import ifadesine ek satırlar eklemek için kullanılabilir.Örne?in:

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

Daha fazla bilgi için bkz. #import Öznitelikleri (C++).

END C++ Özgü

Ayrıca bkz.

Başvuru

Ön işlemci Yönergeleri

Derleyici COM Desteği