Aracılığıyla paylaş


DllImport ve dllexport C++ sınıflarını kullanma

Microsoft özel

C++ sınıfları ile bildirebilirsiniz DllImport veya dllexport özniteliği.Bu formlar tüm sınıfı içe veya dışa gelmez.Bu şekilde dışa sınıfları verilebilir sınıflar olarak adlandırılır.

Aşağıdaki örnek verilebilir bir sınıfı tanımlar.Tüm üye işlevlerini ve statik veri aktarılır:

#define DllExport   __declspec( dllexport )

class DllExport C {
   int i;
   virtual int func( void ) { return 1; }
};

Bu açık kullanımına dikkat edin DllImport ve dllexport verilebilir bir sınıfın üyeleri özniteliklerinde yasaklanıyor.

dllexport sınıfı

Bir sınıf bildirmek ne zaman dllexport, tüm üye işlevlerini ve statik veri üyeleri verilir.Aynı programdaki gibi tüm üyelerinin tanımları sağlamanız gerekir.Aksi halde, linker hata oluşturulur.Bu kuralın tek istisnası, kendisi için açık tanımları sağladığınız olmayan saf sanal işlevler için geçerlidir.Ancak, yıkıcı bir soyut sınıf için her zaman yıkıcı için temel sınıf olarak adlandırılır çünkü saf sanal yıkıcı her zaman bir tanımını sağlamalıdır.Bu kurallar nonexportable sınıfları için aynı olduğunu unutmayın.

Sınıf türü veya sınıflar döndüren işlevlerin veri veriyorsanız, sınıf vermek emin olun.

DllImport sınıfları

Bir sınıf bildirmek ne zaman DllImport, tüm üye işlevlerini ve statik veri üyeleri alınır.Davranışını tersine DllImport ve dllexport nonclass türlerinde, hangi aynı programda, bir tanım statik veri üyeleri belirtemezsiniz bir DllImport sınıf tanımlanır.

Devralma ve verilebilir sınıfları

Verilebilir bir sınıfın tüm temel sınıflar verilebilir olması gerekir.Tersi durumda, derleyici uyarı üretilir.Üstelik de sınıflardır erişilebilir tüm üyelerine verilebilir olmalıdır.Bu kural verir bir dllexport devralmıyor sınıfı bir DllImport sınıfı ve bir DllImport devralmıyor sınıfı bir dllexport (ikinci tavsiye edilmez rağmen) sınıf.Bir kural olarak dll (göre istemci erişim kuralları C++) erişilebilen her şeyi verilebilir arabiriminin parçası olmalıdır.Bu özel veri üyeleri başvurulan satır içi işlevleri içerir.

Seçici üye alma/verme

Üye işlevler ve statik verileri bir sınıf içinde dolaylı olarak dış bağlantı olmadığından, onlarla bildirebilirsiniz DllImport veya dllexport öznitelik sürece tüm sınıf verilir.Tüm sınıf alınamaz veya verilemez, üye işlevleri ve veri olarak açıkça bildirilmesini, DllImport veya dllexport yasaktır.Statik veri üyesi bir sınıf tanımı içinde bildirmek, dllexport, bir tanım (ile nonclass dış bağlantı gibi) aynı program içinde yerde gerçekleşmesi gerekir.

Benzer şekilde, üye işlevleri ile bildirebilirsiniz DllImport veya dllexport öznitelikleri.Bu durumda sağlamanız gereken bir dllexport aynı program içinde tanımı.

Düşünmek faydalı Seçici üye alma ve verme ile ilgili birkaç önemli noktaları unutmayın:

  • Seçici üye alma/verme, daha kısıtlayıcı olan verilen sınıf arabiriminin bir sürümünü sağlamak için en iyi şekilde kullanılır; diğer bir deyişle, bir dilden daha az ortak ve özel özellikleri sunar bir dll yeniden tasarlayabilirsiniz Aksi takdirde izin.Ayrıca verilebilir arabirimi ince ayar yapmak için yararlı olur: tanım, istemci bazı özel verilerine erişemiyor bildiğinizde, tüm sınıf vermemeniz.

  • Bir sınıfın bir sanal işlevi dışa aktarırsanız, bunların tümünü vermek veya en az istemci doğrudan kullanabileceğiniz sürümleri sağlar.

  • Bir sınıf içinde seçmeli üye alma/verme ile sanal işlevler kullandığınız varsa, İşlevler verilebilir arabiriminde olmalı veya tanımlanan satır içi (istemciye görünür).

  • Üye olarak tanımlarsanız, dllexport ancak sınıf tanımında dahil etmezseniz, derleyici bir hata oluşturulur.Sınıf başlığında üye tanımlamanız gerekir.

  • Rağmen sınıf üyesi tanımını DllImport veya dllexport olan izin verilen, sınıf tanımında belirtilen arabirim kılamaz.

  • Gövde içinde bildirilen, sınıf tanımının dışında bir yerde bir üye işlev tanımlarsanız, işlev olarak tanımlanmış olması durumunda bir uyarı üretilir dllexport veya DllImport (Bu tanım farklıysa, sınıf bildiriminde belirtilen).

Ayrıca bkz.

Başvuru

dllexport, DllImport