Aracılığıyla paylaş


#import yönergesi (C++)

C++ Özel

Tür kitaplığındaki bilgileri birleştirmek için 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.

Sözdizimi

#import "filename" [attributes]
<#import dosya adı> [öznitelikler]

Parametreler

filename
İçeri aktarılacağını tür kitaplığını belirtir. Dosya adı aşağıdaki türlerden biri olabilir:

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

  • Tür kitaplığındaki bir denetimin progid değeri. anahtar sözcüğü her progid:progid'in ö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 32 bitlik bir çapraz derleyici kullandığınızda, derleyici yalnızca 32 bit kayıt defteri kovanını okuyabilir. 64 bit türünde bir kitaplık oluşturmak ve kaydetmek için yerel 64 bit derleyicisini kullanmak isteyebilirsiniz.

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

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

    veya belirtmezsenizversion, uygulanan kurallar progid: da öğesine libid:uygulanır.lcid

  • Yürütülebilir (.exe) dosyası.

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

  • Tür kitaplığı içeren bileşik belge.

  • LoadTypeLib API'sinin anladığı diğer tüm dosya biçimleri.

Öznitelik
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

Açıklamalar

Dosya adı arama sırası

dosya adı isteğe bağlı olarak dizin belirtimleri tarafından oluşturulur. Dosya adı, var olan bir dosyayı adlandırmalıdır. İki söz dizimi formu arasındaki fark, yol tamamlanmamış olarak belirtildiğinde ön işlemcinin tür kitaplığı dosyalarını arama sırasıdır.

Söz dizimi formu Eylem
Teklif edilen form Önişlemciye, önce #import deyimini içeren dosyanın dizininde ve sonra bu dosyayı içeren (#include) dosyaların dizinlerinde tür kitaplığı dosyalarını aramasını ister. Önişlemci daha sonra aşağıda gösterilen yollar boyunca arama yapın.
Köşeli ayraç formu Önişlemciye aşağıdaki yollarda tür kitaplığı dosyalarını aramasını sağlar:

1. Ortam PATH değişkeni yol listesi
2. Ortam LIB değişkeni yol listesi
3. /I derleyici seçeneği tarafından belirtilen yol, derleyicinin no_registry özniteliğine sahip başka bir tür kitaplığından başvuruda bulunan bir tür kitaplığını araması dışında.

Yerelleştirme kimliğini ve sürüm numarasını belirtin

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

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

Yerelleştirme kimliği belirtmezseniz, aşağıdaki kurallara göre bir 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 ilk kimlik kullanılır.

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

  • Sürüm numarası belirtmezseniz en son sürüm kullanılır.

İçeri aktarma tarafından oluşturulan üst bilgi dosyaları

#import, C++ kaynak kodundaki tür kitaplığı içeriğini yeniden oluşturan iki üst bilgi dosyası oluşturur. Birincil üst bilgi dosyası, Microsoft Arabirim Tanım Dili (MIDL) derleyicisi tarafından üretilen dosyaya benzer, ancak derleyici tarafından oluşturulan ek kod ve veriler içerir. Birincil üst bilgi dosyası , tür kitaplığıyla aynı temel ada ve bir de öğesine sahiptir. TLH uzantısı. İkincil üst bilgi dosyası, ile tür kitaplığıyla aynı temel ada sahiptir. TLI uzantısı. Derleyici tarafından oluşturulan üye işlevleri için uygulamaları içerir ve birincil üst bilgi dosyasına (#include) eklenir.

Parametreleri kullanan byref bir dispinterface özelliği içeri aktarılıyorsa, #import işlev için bir __declspec(özellik) deyimi oluşturmaz.

Her iki üst bilgi dosyası da /Fo (ad nesne dosyası) seçeneği tarafından belirtilen çıkış dizinine yerleştirilir. Ardından, birincil üst bilgi dosyası bir #include yönerge tarafından adlandırılmış gibi derleyici tarafından okunur ve derlenmiş olur.

Aşağıdaki derleyici iyileştirmeleri #import yönergesiyle birlikte gelir:

  • Başlık dosyası oluşturulduğunda, tür kitaplığıyla aynı zaman damgası verilir.

  • #import işlendiğinde, derleyici önce üst bilginin mevcut olup olmadığını ve güncel olup olmadığını denetler. Evet ise yeniden oluşturulması gerekmez.

#import yönergesi de en az yeniden derlemeye katılır ve önceden derlenmiş bir üst bilgi dosyasına yerleştirilebilir. Daha fazla bilgi için bkz . Önceden derlenmiş üst bilgi dosyaları oluşturma.

Birincil tür kitaplığı üst bilgi dosyası

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

  • Başlık ortak: COMDEF için açıklamalardan, #include deyiminden oluşur. H (üst bilgide kullanılan bazı standart makroları tanımlar) ve diğer çeşitli kurulum bilgileri.

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

  • Akıllı işaretçi bildirimleri: Şablon sınıfı _com_ptr_t bir akıllı işaretçidir. Arabirim işaretçilerini kapsüller ve , Releaseve QueryInterface işlevlerini çağırma AddRefgereksinimini ortadan kaldırır. Ayrıca, yeni bir COM nesnesi oluştururken çağrıyı CoCreateInstance gizler. Bu bölümde, _com_ptr_t şablon sınıfının şablon özelleştirmeleri olarak COM arabirimlerinin tür tanımlarını oluşturmak için makro deyimi _COM_SMARTPTR_TYPEDEF kullanılır. Örneğin, arabirimi IMyInterfaceiçin , . TLH dosyası şu içeriği içerir:

    _COM_SMARTPTR_TYPEDEF(IMyInterface, __uuidof(IMyInterface));
    

    derleyicinin genişletileceği yer:

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

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

  • Typeinfo bildirimleri: Öncelikle tarafından döndürülen ITypeLib:GetTypeInfotek tek typeinfo öğelerini ortaya çıkarmak için sınıf tanımlarından ve diğer öğelerden oluşur. Bu bölümde, tür kitaplığındaki her typeinfo, bilgilere bağımlı TYPEKIND bir formdaki üst bilgiye yansıtılır.

  • İsteğe bağlı eski stil GUID tanımı: Adlandırılmış GUID sabitlerinin başlatmalarını içerir. Bu adlar, MIDL derleyicisi tarafından oluşturulan adlara benzer şekilde ve IID_InterfacebiçimindedirCLSID_CoClass.

  • #include ikincil tür kitaplığı üst bilgisi için deyimi.

  • Alt bilgi ortak: Şu anda içerir #pragma pack(pop).

Başlık ortak ve alt bilgi ortak bölümü dışındaki tüm bölümler, özgün IDL dosyasında deyimi tarafından library belirtilen ad alanı içine alınır. Ad alanı adını kullanarak açık bir niteliğe göre tür kitaplığı üst bilgisindeki adları kullanabilirsiniz. İsterseniz aşağıdaki deyimi de ekleyebilirsiniz:

using namespace MyLib;

kaynak kodundaki #import deyiminden hemen sonra.

ad alanı, #import yönergesinin no_namespace) özniteliği kullanılarak gizlenebilir. Ancak ad alanının gizlenmesine neden olan ad çakışmaları olabilir. Ad alanı, rename_namespace özniteliği tarafından da yeniden adlandırılabilir.

Derleyici, şu anda işlemekte olduğu tür kitaplığının gerektirdiği tür kitaplığı bağımlılığının tam yolunu sağlar. Yol, tür kitaplığı üst bilgisine ( açıklamalar biçiminde yazılır. TLH), derleyicinin işlenen her tür kitaplığı için oluşturduğu.

Tür kitaplığı diğer tür kitaplıklarında tanımlanan türlere başvurular içeriyorsa, o zaman . TLH dosyası aşağıdaki sıralamada açıklamalar içerir:

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

#import açıklamasındaki gerçek dosya adı, kayıt defterinde depolandığı gibi çapraz başvurulan tür kitaplığının tam yoludur. Eksik tür tanımlarından kaynaklanan hatalarla karşılaşırsanız, öğesinin başındaki açıklamaları denetleyin. İlk olarak hangi bağımlı tür kitaplıklarının içeri aktarılması gerektiğini görmek için TLH. Olası hatalar, derleme sırasında söz dizimi hatalarıdır (örneğin, C2143, C2146, C2321), C2501 (eksik decl tanımlayıcıları) veya C2433 ('satır içi' veri bildiriminde izin verilmez) hatasıdır. TLI dosyası.

Bağımlılık hatalarını çözmek için, bağımlılık açıklamalarından hangilerinin sistem üst bilgileri tarafından sağlanmıyor olduğunu belirleyin ve bağımlı tür kitaplığının #import yönergesinin bir noktasında bir #import yönergesi sağlayın.

#import öznitelikleri

#import isteğe bağlı olarak bir veya daha fazla öznitelik içerebilir. Bu öznitelikler derleyiciye tür kitaplığı üst bilgilerinin içeriğini değiştirmesini söyler. Tek bir #import deyimine ek çizgiler eklemek için ters eğik çizgi (\) simgesi kullanılabilir. Örneğin:

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

Daha fazla bilgi için bkz . #import öznitelikleri.

END C++ Özel

Ayrıca bkz.

Önişlemci yönergeleri
Derleyici COM desteği