Aracılığıyla paylaş


__declspec(dllexport) Kullanarak DLL'den Dışa Aktarma

Microsoft, derleyicinin dışa aktarma adlarını otomatik olarak oluşturması ve bir .lib dosyasına yerleştirmesi için Visual C++ 16 bit derleyici sürümüne __export öğesini ekledi. Bu .lib dosyası, bir DLL öğesini statik bir .lib öğesine bağlamakta olduğu gibi kullanılabilir.

Yeni derleyici sürümlerinde, bir DLL'den veri, işlevler, sınıflar veya sınıf üye işlevlerini __declspec(dllexport) anahtar kelimesini kullanarak aktarabilirsiniz. __declspec(dllexport) dışa aktarma yönergesini nesne dosyasına ekler, dolayısıyla bir .def dosyası kullanmanıza gerek kalmaz.

Bu kolaylık, tasarlanan C++ işlev adlarını vermeye çalışırken en çok görünür. İsim dekorasyonu için standart bir belirtim olmadığı için, bir verilen işlevin ismi derleyici sürümüne göre değişebilir. __declspec(dllexport) öğesini kullanıyorsanız, DLL'yi ve bağımlı.exe dosyalarını yeniden derleme yalnızca adlandırma kuralı değişiklikleri göz önüne alınarak gereklidir.

Sıralı, NONAME ve PRIVATE gibi birçok dışa aktarma yönergesi yalnızca.def dosyasında gerçekleştirilebilir ve bu öznitelikleri.def dosyası olmadan belirtmek mümkün değildir. Ancak, bir .def kullanmanın yanı sıra __declspec(dllexport) dosyası kullanmak yapı hatalarına neden olmaz.

İşlevleri dışarı aktarmak için bir anahtar kelime belirtilmişse __declspec(dllexport) anahtar kelimesinin çağırma kuralı anahtar kelimesinin solunda belirmesi gerekir. Örneğin:

__declspec(dllexport) void __cdecl Function1(void);

Bir sınıftaki tüm genel veri üyelerini ve üye işlevleri dışarı aktarmak için aşağıdaki gibi sınıf adının sol tarafında anahtar kelime belirmelidir:

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };

Not

__declspec(dllexport), __clrcall çağrı kuralı bulunan bir fonksiyona uygulanamaz.

DLL'nizi oluştururken genellikle dışa aktardığınız işlev prototiplerini ve/veya sınıfları içeren bir başlık dosyası oluşturursunuz ve __declspec(dllexport) öğesini başlık dosyasındaki bildirimlere eklersiniz. Kodunuzu daha okunabilir hale getirmek için __declspec(dllexport) için bir makro tanımlayın ve her dışa aktardığınız simge ile makroyu kullanın:

#define DllExport   __declspec( dllexport ) 

__declspec(dllexport) işlev adlarını DLL'nin dışa aktarım tablosuna depolar. Tablo'nun boyutlarını en iyi hale getirmek istiyorsanız, bkz. İşlevleri Bir DLL'den Ad Yerine Sıra Kullanarak Dışa Aktarma.

Not

DLL kaynak kodunu Win16'dan Win32'ye taşırken __export öğesinin her bir örneğini __declspec(dllexport) ile değiştirin.

Bir başvuru olarak, Win32 Winbase.h üstbilgi dosyası içinde arayın. __declspec(dllimport) kullanımı örneklerini barındırır.

Ne yapmak istiyorsunuz?

Hangi konu hakkında daha fazla bilgi edinmek istiyorsunuz?

Ayrıca bkz.

Kavramlar

DLL'den Dışa Aktarma