32-Bit alma kitaplıkları .OBJs olmadan veya kaynağı oluşturma

Makale çevirileri Makale çevirileri
Makale numarası: 131313 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, kaynak kodu veya nesne modülünüz sahip olduğunuz bir .dll verilen bir alma kitaplığı oluşturmak açıklar. Visual C++ 16-bit sürümleriyle haliyle bir alma kitaplık bir .dll oluşturabileceği hiçbir 32-bit yardımcı programı vardır.

Not: Bu yöntem, Microsoft'a ait olmayan geliştirme araçları ile oluşturulan DLL'lerle birlikte çalışmayabilir.

Daha fazla bilgi

Normalde, bir .dll ya da işlevleri veya veri öğeleri, bir alma kitaplığı verir (ve dosya verir) herhangi bir hedef oluşturma bağlama işlemini bir parçası olarak oluşturulur. Ancak, bir alma kitaplığı ile gelmemektedir bir üçüncü taraf .dll durumunda başarıyla yükleme zamanı dinamik bağlama kullanarak .dll kullanmak üzere bir alma kitaplık oluşturmak gerekebilir. Bir alma kitaplığı çalışma zamanı dinamik bağlama için gerekli değildir.

Bir .dll verilen bir alma kitaplığı oluşturmak için iki yol vardır:
  • LIB /DEF ile kullanmak için bir .def dosyası oluşturun: komutu.
  • Işlevlerini saplama ve alma/verme ilişkileri taklit edecek şekilde oluşturduğunuz .OBJ dosyaları kullanır. LIB /DEF'ı kullanın: alma kitaplığı oluşturmak için kullanılan komut.

Bir .def dosyası oluşturma

Nesne modülleri olan .dll bir C arabirimi işlevleri verir, ya da yalnızca, bir .def dosyası kaynak kodu olmayan bir .dll bir alma kitaplığı oluşturmak için kullanabilirsiniz. Özellikle, işlevleri C çağırma kuralı kullanmak üzere bildirilmiş olması gerekir. Bu, normal olarak da işlev için prototip içinde kullanılan _cdecl özniteliği tarafından belirtilir. _Cdecl özniteliği yok belirtilirse, varsayılan değer olduğunu unutmayın, /Gz (_stdcall varsayılandır) veya /Gr (_fastcall varsayılandır) CL komut satırında belirtilmedi. Bu kısıtlamaya nedeni tüm adları, önde gelen bir alt çizgi otomatik olarak aktarılır LIB hizmet programı tarafından yapılan bir varsayımına dayanır. Bu yalnızca _cdecl işlev adları için geçerlidir.

Bir C arabirimi verilen işlevlerle bir .dll verildiğinde, aşağıdaki adımları izleyerek bir alma kitaplığı oluşturabilirsiniz:
  1. DUMPBIN /EXPORTS < .dll dosya adı > ilgili .dll için verilen simgeler listesini almak için kullanın. Simgeleri "sıra ipucu ad.", başlıkları olan tablo "ad" sütununda görünür...
  2. DUMPBIN çıktı "ad" sütununda listelenen işlevlerin adları ile EXPORTS bölümü içeren bir .def dosyası oluşturun.
  3. Çağrıyı yapan programa kullanıldığında olduğu gibi _cdecl işlevleri için simge görünür. Yalnızca bu simge .def dosyası EXPORTS bölümünde yerleştirin.
  4. LIB /DEF kullanın: < alma verir ve kitaplığı dosyasını oluşturmak için dosya adı .def >. Temel alma kitaplığın adını .def dosyası taban adı olacaktır. Kullanın/OUT: çıktı kitaplığı adı denetlemek için.

Işlevler, stubbing

C dışında arama kuralları kullan verilen işlevlerin durum biraz daha karmaşıktır. Bu, özellikle C++ işlevler'i ve daha karmaşık ad deseni düzenleri ilgili düşündüğünüz zaman geçerlidir. Bu yöntemi kullanmak için <a0></a0>, en az .dll'ın arabirimi tanımlayan bir üstbilgi dosyası olması gerekir.

Bir <a0>Üstbilgi</a0> dosyasındaki prototipler stubbed işlevleri oluşturmak için <a0></a0>:
  1. "__Declspec(dllexport)." "__declspec(dllimport)" prototip veya bildirim kullanıldığında değiştirin
  2. C kaynağındaki C işlevleri için bir değer döndürür ve C fonksiyonlarında için C++ kaynak kodu ('extern "C" ' yapı ile kullanılır), noktalı virgül yerine işlevler ile eşleşen bir çift ayraç ("{}") işlevini prototip sona erdirir.
  3. C++ işlevleri için (genel veya üyesi) olan bir değer döndürür, kukla gövde işlevi oluşturmak ve uygun türü boş bir değer gerekir. (Bir dönüş ifadesi işlevi olan geçersiz.) Bu sınıf üyesi işlevler için de gider. Bu yordamın amacı olan kukla Bu gövdeler etkisi için doğru alma kitaplığı oluşturma içine LIB yardımcı programı kandırmaya aklınızda bulundurun.
  4. C++ sınıflarını, saplama sınıf bildirimindeki prototipler kullanarak üye işlevleri, inlining işlevi devre dışı olarak ne zaman, derleyin.
  5. Işlev bağımsız değişkenleri, genellikle yalnızca bir <a0>Üstbilgi</a0> dosyasındaki türüne göre belirtilir. Örneğin, Geta(int). Boş bağımsız değişken bir tanıtıcı kukla işlevi gövdesi Geta(int x) eklerken belirtilmeli. Aksi takdirde hata C2055 oluşturulur.

ÖRNEK

MYDLL.DLL tanımlayan bir üstbilgi dosyası gibi görünüyorsa:
// mydll.H

extern "C" __declspec(dllimport) void _stdcall Function(void);

class __declspec(dllimport) CMyClass {
     int a;
     long b;
public:
     int Geta(int);
     long Getb();
     CMyClass();
};
				
kukla kaynak dosya alma kitaplığı oluşturmak için kullandığınız gibi görünmelidir:
 // mydll.CPP

 extern "C" __declspec(dllexport) void _stdcall Function(void) {}

 class __declspec(dllexport) CMyClass {
      int a;
      long b;
 public:
      int Geta(int x) {return 111;}
      long Getb() {return 111;}
      CMyClass() {}
 };
				
işlevleri stubbed once, tüm yapmanız gereken olan derleme kaynak dosya bir .OBJ dosyasına:
CL /c /Ob0 mydll.CPP
Not: CMyClass içinde tanımlanan işlevleri simgeleri oluşturulmasında zorlamak için inlining işlevi devre dışı bırakılması gerekiyor. Işlevi inlining etkinleştirilmişse, derleyici olduğunu çeviri birimindeki üye işlevleri için başvuru işlevi gövdelerini atmak; böylece fark. Visual C++ CL komut satırı başvurudaki satır içi işlevi genişletme en iyi duruma getirme altında tartışma bakın.

.OBJ dosyaları sonra LIB /DEF kullanabilirsiniz: alma kitaplığı (.LIB) ve (.EXP) verir dosyası oluşturmak için:
LIB /DEF: mydll.OBJ
LIB</a0> komutu hakkında daha fazla bilgi için Visual C++ Books Online'da "LıB başvuru" başvurun.

Ayrıca, Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
14048532 Bit DLL içinde PASCAL LIKE simgeleri verme

Özellikler

Makale numarası: 131313 - Last Review: 29 Haziran 2004 Salı - Gözden geçirme: 2.1
Bu makaledeki bilginin uygulandığı durum:
  • The Microsoft Library Manager (LIB.EXE), Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 5.0 Standard Edition
Anahtar Kelimeler: 
kbmt kb3rdparty kbcode kbhowto KB131313 KbMttr
Machine-translated Article
Ö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:131313
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com