Makale numarası: 132044 - Son Gözden Geçirme: 02 Aralık 2003 Salı - Gözden geçirme: 2.0 BILGI: _declspec(dllimport) & _declspec(dllexport) kod içinde kullanma
Bu SayfadaÖzetBu makalede, Microsoft Bilgi Bankası'ndaki aşağıdaki makalede anlatılan bilgiler tamamlar: 107501
(http://support.microsoft.com/kb/107501/EN-US/
)
BILGI: __declspec, Visual C++ 32-bit olarak değiştirilen __export Bu makalede, olumlu ve _declspec(dllimport) ve _declspec(dllexport) uygulamanızda kullanmanın mechanics anlatılır. Daha fazla bilgiVisual C++'ın 32-bit sürümü _declspec(dllimport) _declspec(dllexport) önceden Visual C++ 16-bit sürümlerinde kullanılan __export anahtar sözcüğü değiştirmek için kullanır. Doğru derlemeye _declspec(dllimport) kodunuz için kullanmak gerekmez, ancak yapmak, böylece daha iyi kod üretmede derleyici sağlar. Derleyici, emin olmak için bir işlev veya bir DLL dosyasında bulunup bildiğinden, daha iyi kod oluşturmak, derleyici zamanki yönlendirme düzeyi Atla kodlarını oluşturabilir, böylece bir işlev çağrısında bir DLL sınırı aşıldı bulunması mümkün olur. Uygun .def dosyası EXPORTS bölümle, _declspec(dllexport) gerekli değildir. _declspec(dllexport), bir .def dosyası kullanmadan bir .exe veya .dll işlevleri vermek için kolay bir yol sağlamak için eklenmiştir. Bu makalenin geri kalanında, bu sorunların oldukça düşük düzeyli, kapsamlı bir tartışma sağlar. Win32 taşınabilir yürütülebilir dosyası biçimini alır Düzeltilecek işlemdeki gereken sayfaların sayısını en aza indirmek için tasarlanmıştır. Bunu yapmak için <a0></a0>, herhangi bir programı için tüm alma adresleri Al adres tablosu olarak adlandırılan tek bir yerde yerleştirir. Bu, yükleyici, yalnızca bir veya iki sayfa bu alır erişirken değiştirmeye olanak sağlar. Işlev çağrıları için _declspec(DllImport) kullanmaAşağıdaki kod örneği, func1 main() işlevini içeren .exe dosyasından ayrı bir DLL bulunan bir işlevdir varsayalım.Bu kod _declspec(DllImport), verilen: 0x40000000: jmp DWORD PTR __imp_func1 The linker bir thunk oluşturmuyor için yoksa, daha iyi olduğu için bu nedenle _declspec(dllimport) kullanarak daha uygundur. Kod thunks büyütmek (rısc TABANLı sistemlerde, onu birkaç yönergeleri olabilir) ve kendi önbellek performans düşebilir. Derleyici bir DLL'dir bir işlev bildirmek, onu dolaylı bir çağrı sizin için oluşturabilir. Böylece artık bu kod: Öte yandan, bir DLL içinde işlev çağrıları için dolaylı bir çağrı kullanmak zorunda istemiyorum. Bir işlevin adresi zaten biliyor. Zaman ve yer yüklemek ve doğrudan bir aramayı her zaman daha hızlı ve daha küçük olacak şekilde dolaylı bir çağrı önce işlevin adresi depolamak için gereklidir. Yalnızca __declspec(dllimport) DLL işlevleri dışındaki ararken kullanmak istediğiniz DLL kendisi. __Declspec(DllImport) içinde bir DLL işlevi, bu DLL oluştururken kullanmayın. _Declspec(dllexport) kullanmaMicrosoft, derleyici verme adları otomatik olarak oluşturmak ve bunları bir .LIB dosyasında izin vermek için 16 bit Derleyicisi sürüm __export kullanıma sunmuştur. Bir DLL ile bağlamak için bu .LIB dosya sonra yalnızca statik bir .LIB gibi kullanılabilir.Microsoft, bu kullanışlı devam etmek için __declspec(dllexport) eklendi. Amacı; bu nedenle, bir .def dosyası gerekmeyen nesne dosyaya verme yönergesini eklemektir. Vermek istediğiniz, C++ işlev adları donatılmış bu kullanışlı en belirgin olur. Verilen bir fonksiyonun adını, derleyici sürümleri arasında değişebilir, dolayısıyla ad düzenleme için standart belirtim yoktur. _Declspec(dllexport) kullanırsanız, DLL ve bağımlı .exe dosyaları recompiling adlandırma kuralına değişiklikleri yalnızca hesap için gereklidir. Sıra sayılarını, NONAME veya PRIVATE, bir .def dosyası yalnızca yapılabilir ve bir .def dosyası olmadan bu öznitelikleri belirtmek için bir yol gibi birçok yönergeleri verin. Ancak, bir .def dosyası kullanarak ek olarak _declspec(dllexport) kullanarak derleme hataları neden olmaz. Başvuru olarak Win32 WINBASE.H üstbilgi dosyası aracılığıyla arayın. Bu, tercih edilen __declspec(dllexport) ve __declspec(dllimport) kullanım örnekleri içerir. _Declspec(dllexport) _declspec(dllimport) üzerinde veri ileSöz konusu olduğunda, _declspec(dllimport) kullanarak bir yönlendirme katmanı silen bir kullanışlı maddenin veridir. Bir DLL dosyasından veri aldığınızda, hala alma adresi tablosu gitmek zorunda. Win32 gün _declspec(dllimport) önce <a0></a0> Bu verilere, DLL dosyasından verilen zaman fazladan bir yönlendirme düzeyi yapmak, anımsamak zorunda kaldı yapısındaki:Verileri otomatik olarak bir DLL dosyasından vermek için <a0></a0>, bu bildirimi kullanın: Bir .def dosyası kullanma__Declspec(dllimport) bir .def dosyası ile birlikte kullanmayı seçerseniz, yanlış kodlama sorun oluşturacağını olasılığını azaltmak için SABIT yerine VERI kullanmak için .def dosyası değiştirmelisiniz:
Keyword Emits in the import lib Exports
CONSTANT __imp_ulDataInDll ulDataInDll
__ulDataInDll
DATA __imp_ulDataInDll ulDataInDll
SABITINI kullanırsanız, aşağıdaki kod yap?lar?n? birini ulDataInDll erişmek için kullanılabilir: -VEYA- Bu durumda bu hesap için .def dosyası içinde SABIT görür, geçerli Visual C++ linker bir uyarı verir. Yalnızca gerçek nedeni SABITINI kullanırsanız, burada üstbilgi dosyası üzerinde prototip dllimport liste belgemde bazı nesne dosyasını yeniden başlatamıyor, olur. ReferanslarVisual C++ Books Online'da sağlayan önemli miktarda bir belge dllexport ve dllimport depolama sınıfı öznitelikleri. Bu, programlama teknikleri başvuru "DLL Win32 için oluşturma" bölümde "Dllexport ve dllimport öznitelikleri" ve C++ Dil Başvurusu, "Microsoft özgü değiştiriciler" bölüm "Using dllimport ve C++ içinde dllexport" konularında "Simgeleri verme" konuları içerir. Kapsamlı bir listesi için ilgili konular Books Online'da "dllimport" veya "dllexport" için arama yapın. Daha fazla bilgi için, aşağıdaki Microsoft Knowledge Base makalelerine bakın: 90530
(http://support.microsoft.com/kb/90530/EN-US/
)
Nasıl yapılır: bir DLL DOSYASı veya uygulama veri ver 107501
(http://support.microsoft.com/kb/107501/EN-US/
)
BILGI: __declspec, Visual C++ 32-bit olarak değiştirilen __export Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:132044
(http://support.microsoft.com/kb/132044/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukMakale çevirileri |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Üste