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

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 131313
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menjelaskan cara membuat perpustakaan impor yang diberikan.DLL untuk yang Anda telah ada sumber kode atau objek modul. Ada tidak ada utilitas 32-bit yang dapat membuat sebuah perpustakaan impor dari.DLL, ada adalah dengan 16-bit versi 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 data item, impor perpustakaan (dan ekspor file) yang dihasilkan sebagai bagian dari menghubungkan proses. Tetapi dalam kasus pihak ketiga.DLL yang tidak kapal dengan perpustakaan impor, Anda mungkin perlu untuk menghasilkan impor perpustakaan dalam rangka untuk menggunakan.DLL yang berhasil menggunakan waktu buka dinamis menghubungkan. Impor Perpustakaan 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 fungsi untuk dinyatakan untuk menggunakan konvensi panggilan C. Ini ditentukan oleh atribut _cdecl, biasanya digunakan dalam prototipe untuk fungsi. Catatan Jika atribut tidak ditentukan, _cdecl yang default ketika /Gz (_stdcall adalah default) atau /Gr (_fastcall adalah default) tidak ditentukan pada CL baris perintah. Alasan untuk pembatasan ini didasarkan pada asumsi dibuat oleh utilitas LIB semua nama yang diekspor secara otomatis tanpa terkemuka garis bawah. Hal ini hanya berlaku untuk nama-nama fungsi _cdecl.

Diberikan.DLL dengan fungsi yang diekspor melalui antarmuka C, Anda dapat membuat Impor 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 Anda Pertimbangkan fungsi C++ dan skema dekorasi nama lebih kompleks terlibat. Untuk menggunakan metode ini, Anda setidaknya harus memiliki header file yang menjelaskan.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.H

extern "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 menyusun sumber file ke.OBJ file:
CL/c /Ob0 mydll.CPP
Catatan: Menonaktifkan fungsi inlining diperlukan untuk memaksa generasi simbol untuk fungsi-fungsi yang didefinisikan dalam CMyClass. Jika fungsi inlining diaktifkan, Kompilator akan melihat bahwa ada tidak ada referensi untuk fungsi anggota dalam terjemahan unit, sehingga akan membuang fungsi tubuh. Lihat diskusi di inline fungsi ekspansi di bawah optimasi dalam Visual C++ CL perintah baris referensi.

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

Lihat juga artikel berikut pada Basis Pengetahuan Microsoft:
140485 Mengekspor PASCAL-seperti simbol di 32-bit dll

Properti

ID Artikel: 131313 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0
Kata kunci: 
kb3rdparty kbcode kbhowto kbmt KB131313 KbMtid
Penerjemahan Mesin
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.

Berikan Masukan

 

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