Anda sedang offline saat ini, menunggu internet Anda untuk menyambung kembali

Cara membuat 32-bit impor perpustakaan tanpa.OBJs atau sumber

PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.

Klik disini untuk melihat versi Inggris dari artikel ini:131313
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan “sebagaimana adanya” dan tidak akan diperbarui.
RINGKASAN
Artikel ini menjelaskan cara membuat perpustakaan impor yang diberikan.DLL untukyang Anda telah ada sumber kode atau objek modul. Ada tidak ada utilitas 32-bityang dapat membuat sebuah perpustakaan impor dari.DLL, ada adalah dengan 16-bitversi Visual C++.

CATATAN: Metode ini mungkin tidak bekerja dengan dll yang dihasilkan dengan alat-alat non-Microsoft pengembangan.
INFORMASI LEBIH LANJUT
Biasanya, ketika membangun.DLL atau sasaran yang ekspor fungsi atau dataitem, impor perpustakaan (dan ekspor file) yang dihasilkan sebagai bagian darimenghubungkan proses. Tetapi dalam kasus pihak ketiga.DLL yang tidak kapaldengan perpustakaan impor, Anda mungkin perlu untuk menghasilkan impor perpustakaan dalam rangkauntuk menggunakan.DLL yang berhasil menggunakan waktu buka dinamis menghubungkan. ImporPerpustakaan tidak diperlukan untuk menghubungkan dinamis run-time.

Ada dua cara untuk membuat sebuah perpustakaan impor yang diberikan.DLL:
  • Membuat.DEF file untuk digunakan dengan LIB /DEF: perintah.
  • Tulisan rintisan keluar fungsi, dan menggunakan.OBJ file yang dibuat untuk meniru impor/ekspor hubungan. Kemudian gunakan LIB /DEF: perintah untuk membuat Perpustakaan impor.

Menciptakan.DEF file

Satu-satunya waktu yang dapat Anda gunakan.DEF file untuk menciptakan perpustakaan impor dari.DLL yang Anda tidak memiliki sumber kode atau objek modul adalah jika.DLL ekspor fungsi melalui antarmuka C. Secara khusus, kebutuhan fungsiuntuk dinyatakan untuk menggunakan konvensi panggilan C. Ini ditentukan olehatribut _cdecl, biasanya digunakan dalam prototipe untuk fungsi. CatatanJika atribut tidak ditentukan, _cdecl yang default ketika /Gz (_stdcalladalah default) atau /Gr (_fastcall adalah default) tidak ditentukan padaCL baris perintah. Alasan untuk pembatasan ini didasarkan pada asumsidibuat oleh utilitas LIB semua nama yang diekspor secara otomatis tanpaterkemuka garis bawah. Hal ini hanya berlaku untuk nama-nama fungsi _cdecl.

Diberikan.DLL dengan fungsi yang diekspor melalui antarmuka C, Anda dapat membuatImpor perpustakaan dengan mengikuti langkah-langkah berikut:
  1. Penggunaan DUMPBIN /EXPORTS <.dll file="" name="">untuk mendapatkan daftar diekspor simbol untuk.DLL tersebut. Simbol-simbol muncul dalam "nama" kolom dari tabel yang judul adalah "petunjuk urutan nama."</.dll>
  2. Membuat.DEF file yang berisi bagian ekspor dengan nama-nama fungsi-fungsi di kolom "nama" DUMPBIN output.
  3. Untuk fungsi-fungsi _cdecl, simbol muncul sama seperti itu akan ketika digunakan dalam program panggilan. Hanya menempatkan simbol ini di bagian ekspor The.DEF file.
  4. Menggunakan LIB /DEF:<.def file="" name=""> untuk menghasilkan perpustakaan impor dan ekspor file. Nama dasar perpustakaan impor akan nama dasar .DEF file. Menggunakan/keluar: untuk mengendalikan nama perpustakaan output.</.def>

Stubbing fungsi

Untuk diekspor fungsi yang menggunakan konvensi panggilan selain C,situasi ini sedikit lebih rumit. Hal ini terutama benar ketika AndaPertimbangkan fungsi C++ dan skema dekorasi nama lebih kompleksterlibat. Untuk menggunakan metode ini, Anda setidaknya harus memiliki header file yangmenjelaskan.Antarmuka DLL.

Untuk membuat fungsi stubbed dari prototipe dalam header file:
  1. Ketika "__declspec(dllimport)" digunakan dalam prototipe atau Deklarasi, Ubah ke "__declspec(dllexport)."
  2. Untuk fungsi yang tidak mengembalikan nilai, C fungsi dalam sumber C, dan untuk fungsi-fungsi c dalam c ++ sumber kode (digunakan dengan 'intra "C" ' membangun), menggantikan koma yang berakhir prototipe fungsi dengan sepasang cocok keriting kawat gigi ("()").
  3. Untuk fungsi-fungsi C++ (global atau anggota) yang mengembalikan nilai, Anda harus membuat tubuh boneka untuk fungsi, dan kembali nilai dummy jenis yang tepat. (Tidak memiliki pernyataan kembali dalam fungsi ilegal.) Ini berlaku untuk fungsi anggota kelas juga. Perlu diketahui bahwa Tujuan dari prosedur ini adalah untuk mengelabui utilitas LIB ke menghasilkan perpustakaan benar impor, sehingga tubuh boneka ini tidak berpengaruh.
  4. Tulisan untuk kelas-kelas C++, Anda dapat rintisan keluar fungsi anggota dengan menggunakan prototipe di kelas Deklarasi, selama Anda menonaktifkan fungsi inlining ketika Anda mengkompilasi.
  5. Fungsi argumen biasanya hanya ditentukan oleh jenis dalam header file. Sebagai contoh, Geta(int). Pengenal dummy argumen harus ditentukan Ketika menambahkan dummy fungsi tubuh Geta(int x). Jika kesalahan C2055 dihasilkan.

Contoh

Jika header file yang menggambarkan MYDLL.DLL terlihat seperti:
// mydll.Hextern "C" __declspec(dllimport) void _stdcall Function(void);class __declspec(dllimport) CMyClass {     int a;     long b;public:     int Geta(int);     long Getb();     CMyClass();};				
Berkas dummy sumber yang Anda gunakan untuk membangun perpustakaan impor akan terlihat seperti:
 // 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() {} };				
Setelah fungsi stubbed, semua yang perlu Anda lakukan adalah menyusunsumber file ke.OBJ file:
CL/c /Ob0 mydll.CPP
Catatan: Menonaktifkan fungsi inlining diperlukan untuk memaksa generasisimbol untuk fungsi-fungsi yang didefinisikan dalam CMyClass. Jika fungsi inliningdiaktifkan, Kompilator akan melihat bahwa ada tidak ada referensi untukfungsi anggota dalam terjemahan unit, sehingga akan membuang fungsitubuh. Lihat diskusi di inline fungsi ekspansi di bawah optimasidalam Visual C++ CL perintah baris referensi.

Setelah Anda memiliki.OBJ file, Anda dapat menggunakan LIB /DEF: untuk menciptakan imporperpustakaan (.LIB) dan ekspor file (.EXP):
LIB /DEF: mydll.OBJ
Untuk informasi lebih lanjut tentang perintah LIB, baca "Referensi LIB" diVisual C++ buku secara Online.

Lihat juga artikel berikut pada Basis Pengetahuan Microsoft:
140485 Mengekspor PASCAL-seperti simbol di 32-bit dll
2,50 2,55 LINK /LIB

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 131313 - Tinjauan Terakhir: 09/14/2011 09:47:00 - Revisi: 2.0

  • kb3rdparty kbcode kbhowto kbmt KB131313 KbMtid
Tanggapan