Saya baru-baru ini mengerjakan proyek yang menggunakan dll vc, tetapi perlu dipanggil dalam .net. Saya mempelajari cara memanggil dll yang tidak dikelola di c#.
Pertama mari kita perkenalkan file dll
1.file dll
Pustaka tautan dinamis (juga disebut DLL, kependekan dari "Perpustakaan Tautan Dinamis") adalah salah satu komponen terpenting dari Microsoft Windows. Buka folder sistem Windows dan Anda akan menemukan ada banyak file DLL di folder Windows tersebut fungsi sistem utama diimplementasikan dalam bentuk modul DLL.
Pustaka tautan dinamis tidak dapat dijalankan secara langsung, juga tidak dapat menerima pesan. Ini hanyalah file independen yang berisi fungsi (metode) yang dapat dipanggil oleh program atau DLL lain untuk menyelesaikan operasi tertentu. Catatan: Umumnya disebut "metode" dalam C#. ) , tetapi fungsi-fungsi ini bukan bagian dari program eksekusi itu sendiri, tetapi dimuat sesuai permintaan sesuai dengan kebutuhan proses, dan hanya dapat berperan saat ini.
DLL dimuat ke dalam ruang virtual proses oleh sistem hanya ketika aplikasi membutuhkannya, dan menjadi bagian dari proses pemanggilan. Saat ini, DLL hanya dapat diakses oleh thread proses, dan pegangannya bisa digunakan oleh proses pemanggilan, dan proses pemanggilan Proses menangani juga dapat digunakan oleh DLL. Di dalam memori, DLL hanya memiliki satu instance, dan persiapannya tidak ada hubungannya dengan bahasa pemrograman dan kompiler tertentu, sehingga pemrograman bahasa campuran dapat dicapai melalui DLL. Objek apa pun (termasuk variabel) yang dibuat oleh kode dalam fungsi DLL dimiliki oleh thread atau proses yang memanggilnya.
2. Memanggil DLL
Setiap bahasa pemrograman memiliki metode pemanggilan DLL yang berbeda-beda. Disini kami hanya memperkenalkan metode pemanggilan DLL menggunakan C#. Pertama, Anda perlu memahami apa yang dikelola dan apa yang tidak dikelola. Secara umum, dapat dianggap bahwa kode yang tidak dikelola sebagian besar adalah komponen DLL dan activeX yang dikembangkan berdasarkan platform win 32, sedangkan kode yang dikelola dikembangkan berdasarkan platform .net.
(1) Metode umum memanggil fungsi yang tidak dikelola di DLL
Pertama, metode eksternal harus dideklarasikan dalam program sumber bahasa C#. Bentuk dasarnya adalah:
[DLLImpor("File DLL")]
Pengubah extern mengembalikan nama metode tipe variabel (daftar parameter)
di dalam:
File DLL: berisi file perpustakaan yang mendefinisikan metode eksternal.
Pengubah: Pengubah akses, pengubah selain abstrak yang dapat digunakan saat mendeklarasikan metode.
Tipe variabel kembalian: Tipe variabel kembalian dari metode yang perlu Anda panggil dalam file DLL.
Nama metode: Nama metode yang perlu Anda panggil dalam file DLL.
Daftar parameter: Daftar metode yang perlu Anda panggil dalam file DLL.
Catatan: Namespace System.Runtime.InteropServices perlu digunakan dalam deklarasi program.
DllImport hanya dapat ditempatkan pada deklarasi metode.
File DLL harus ditempatkan di direktori program saat ini atau jalur kueri yang ditentukan oleh sistem (yaitu: jalur yang ditetapkan oleh Path dalam variabel lingkungan sistem).
Jenis variabel kembalian, nama metode, dan daftar parameter harus konsisten dengan definisi dalam file DLL.
Jika Anda ingin menggunakan nama fungsi lain, Anda bisa menggunakan pengaturan properti EntryPoint, seperti:
[DllImport("user32.dll", EntryPoint="MessageBoxA")]
static extern int MsgBox(int hWnd, pesan string, keterangan string, tipe int);
Atribut DllImportAttribute opsional lainnya:
CharSet menunjukkan kumpulan karakter yang digunakan pada titik masuk, seperti: CharSet=CharSet.Ansi;
SetLastError menunjukkan apakah metode ini mempertahankan "kesalahan terakhir" Win32, seperti: SetLastError=true;
ExactSpelling menunjukkan apakah EntryPoint harus sama persis dengan ejaan titik masuk yang ditunjukkan, seperti: ExactSpelling=false;
PreserveSig menunjukkan apakah tanda tangan metode harus dipertahankan atau dikonversi, seperti: PreserveSig=true;
CallingConvention menunjukkan konvensi pemanggilan titik masuk, seperti: CallingConvention=CallingConvention.Winapi;