Aracılığıyla paylaş


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

Anahtar sözcüğünü kullanarak __declspec(dllexport) DLL'den verileri, işlevleri, sınıfları veya sınıf üyesi işlevlerini dışarı aktarabilirsiniz. __declspec(dllexport) bir .def dosyası kullanmanız gerekmemesi için nesne dosyasına dışarı aktarma yönergesini ekler.

Bu kolaylık en çok süslü C++ işlev adlarını dışarı aktarmaya çalışırken ortaya çıkıyor. Ad düzenlemesi için standart belirtim olmadığından, dışarı aktarılan işlevin adı derleyici sürümleri arasında değişebilir. kullanıyorsanız __declspec(dllexport), DLL ve bağımlı .exe dosyalarını yeniden derlemek yalnızca adlandırma kuralı değişikliklerini hesaba katmanız için gereklidir.

Sıralar, NONAME ve PRIVATE gibi birçok dışarı aktarma yönergesi yalnızca bir .def dosyasında yapılabilir ve bu öznitelikleri .def dosyası olmadan belirtmenin hiçbir yolu yoktur. Ancak, __declspec(dllexport) .def dosyası kullanmanın yanı sıra kullanmak derleme hatalarına neden olmaz.

İşlevleri dışarı aktarmak için, __declspec(dllexport) anahtar sözcük belirtilmişse, anahtar sözcüğün çağırma kuralı anahtar sözcüğünü solunda görünmesi gerekir. Örneğin:

__declspec(dllexport) void __cdecl Function1(void);

Bir sınıftaki tüm genel veri üyelerini ve üye işlevlerini dışarı aktarmak için anahtar sözcüğü, sınıf adının solunda aşağıdaki gibi görünmelidir:

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

Not

__declspec(dllexport) çağrısı kuralıyla bir işleve __clrcall uygulanamaz.

DLL'nizi oluştururken genellikle dışarı aktardığınız işlev prototiplerini ve/veya sınıfları içeren bir üst bilgi dosyası oluşturur ve üst bilgi dosyasındaki bildirimlere eklersiniz __declspec(dllexport) . Kodunuzu daha okunabilir hale getirmek için __declspec(dllexport) bir makro tanımlayın ve makroyu dışarı aktardığınız her simgeyle birlikte kullanın:

#define DllExport   __declspec( dllexport )

__declspec(dllexport) işlev adlarını DLL'nin dışarı aktarma tablosunda depolar. Tablonun boyutunu iyileştirmek istiyorsanız bkz . İşlevleri Ad Yerine Sıralı Dll'den Dışarı Aktarma.

Ne yapmak istiyorsunuz?

Ne hakkında daha fazla bilgi edinmek istiyorsunuz?

Ayrıca bkz.

DLL'den Dışarı Aktarma