Soru Bir .dll dosyası ve bir üstbilgi dosyası olduğunda .lib dosyası nasıl oluşturulur


Visual Studio'da zaten var olan bir .dll dosyasına erişebilecek bir uygulama oluşturmaya çalışıyorum. Rutinleri çağırmak için uygulamaya ihtiyacım var. Ayrıca zaten var olan bir başlık dosyasına sahibim.

İnternette araştırma yaptım ve bir .lib dosyası oluşturmam gerektiğini öğrendim. Burada benzer sorulara bakarak bir bağlantı buldum: http://support.microsoft.com/kb/131313 Ancak yönergeleri takip edemiyorum.

Bağlantıdaki bilgiler bir DEF dosyası yapmak için yazıyor (Ben başka bir yerde aynı adı taşıyan bir DLL olarak derlenmesi gerekir, ancak bu adın ne olduğunu, .dll dosyası ile aynı ad olduğundan emin değilim?). Ama ben 'DUMPBIN / EXPORTS kullan' ilk yönünü anlamıyorum. Daha sonra 'saplama' işlevlerine ihtiyacım var ve daha sonra .OBJ dosyaları ile ilgili bir şey (Bu dosyaların ne olduğunu bilmiyorum).

Yukarıdaki bağlantıya benzer, takip edilmesi kolay herhangi bir adım adım talimat var mı?


32
2018-02-20 11:20


Menşei


Hangi derleyici ile sonuçta ortaya çıkan lib ile kullanmak istersiniz? Görsel stüdyo? Hangi versiyon? - David Feurle
Ne tür bir DLL? - LihO
DLL ve Matlab arasında kullanmak için uygulama olarak Microsoft Visual Studio 2010 kullanmayı amaçlıyorum. DLL, Wintab32 olarak adlandırılır, grafik tablet kullandığınızda bulunur. - hde


Cevaplar:


İhtiyacın olacak Microsoft Visual C ++ 2010 Express (veya herhangi bir MSVC komut satırı araçları kaynağı) ve DLL'niz.

Adımlar:

  1. dumpbin /EXPORTS yourfile.dll > yourfile.exports
  2. Gerekli fonksiyonların isimlerini yourfile.exports yeni haline yourfile.def dosya. Sözcükle bir satır ekle EXPORTS bu dosyanın en üstünde.
  3. Aşağıdaki komutları çalıştırın VC\bin dizin (hangisi lib.exe ve diğer derleme araçları bulunur.

 vcvars32.bat

 lib /def:yourfile.def /out:yourfile.lib

Oluşturulan iki dosya almalısınız: yourfile.lib ve yourfile.exp


41
2018-04-21 03:09



kullanma dumpbin.exe /EXPORTS yourfile.dll Bağımlılık Walker yerine adım 1 ve 2 için dışa aktarılan işlev adlarını elde etmek için iyi çalışır. - Christ A


Digital Mars’ları kullanabilirsiniz IMPLIB aracı. Bir .def dosyasına ihtiyaç duymadan sadece dll kullanarak bir lib dosyası oluşturabilir.

İndirme bağlantısı http://ftp.digitalmars.com/bup.zip.

Komut satırı:

implib.exe /s mydll.lib mydll.dll

14
2018-02-20 11:36



Teşekkürler, önerdiğiniz bu IMPLIB'a bir göz atıyorum. Bağlantıyı takiben, önerilen bir kod satırı: implib / s kernel32.lib kernel32.dll. Ben c ++ ile tam bir başlangıç ​​yapıyorum, kodu uygulama ile nasıl başlarım? - hde
C ++ kodu değil :) Sadece konsol (cmd) açın ve dll'inizi kullanarak implib'i çalıştırın (örnek olarak kernel32 ile gösterildiği gibi). Ardından, sonuç .lib dosyasını IDE'nizin lib klasörüne (veya proje klasörüne ve projeye kütüphane yolunu ekleyin) alın. Bundan sonra bu kütüphaneyi kullanmakta özgür olacaksınız (sadece DLL'nin exe ile aynı klasörde kalmasını unutmayın). - Desu_Never_Lies
Bu blog daha iyi açıklıyor gibi görünüyor adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll Yoksa bunu zaten denedin mi? Evet ise işe yaradı mı? - Lothar_K
64 bit DLL'ler için çalışmıyor gibi görünüyor. - atablash


.Def oluşturmak yerine, .dll dosyasında .dll dosyasında tanımlanan işlevler / sınıflar, uygulama kodunda belirtilen __declspec (dllexport) tarafından dışa aktarılarak .lib dosyası oluşturabilirsiniz.

Örneğin (Sözde kod)

X.dll dosyasını oluşturmak için proje (demek, X bir dll adıdır):

Ah:

// Function declaration
__declspec(dllexport) void  foo(void);

A.cpp:

// Function definition 
#include <A.h>
void foo(void) {
; // definition
}

Yukarıdaki dll projesi Visual Studio'da oluşturursanız, derleyici oluşturulur X.dll ve ayrıca X.lib [hangi işlevi ihraç etti foo by __declspec (dllexport)].

App.cpp:

// Load time dynamic linking:
// Application should include X.lib (not X.dll) in the project setting
 #include <A.h>
 int main() {
 foo();
 return 0;
}

Daha fazla çalışma için daha iyi anlamak için lütfen aşağıdaki linklere bakın:

http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL#CppMatureApproach 

http://msdn.microsoft.com/en-us/library/ms686923(v=vs.85).aspx 


-1
2017-09-03 16:18