ID Artikel: 106553 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0 Bagaimana menulis c dll dan menyebutnya dari Visual Basic
Pada Halaman iniRINGKASANArtikel ini menguraikan cara menggunakan dll dengan Visual Basic. Ini mencakup
isu-isu berikut: Bagian A
Bagian B
INFORMASI LEBIH LANJUTBAGIAN A1.0 Apakah DLL?Dll (Dynamic Link Library) adalah aspek penting dari Windows. DLL berisi fungsi yang program eksekusi Anda dapat memanggil selama eksekusi. Dengan kata lain, DLL adalah perpustakaan fungsi yang program Anda dapat menghubungkan dengan secara dinamis.Link dapat statis atau dinamis. Statis link tidak berubah. Semua alamat informasi yang diperlukan oleh program Anda untuk mengakses fungsi perpustakaan tetap ketika file eksekusi yang dibuat dan tetap tidak berubah selama eksekusi. Link dinamis dibuat yang diperlukan. Ketika program Anda membutuhkan fungsi yang tidak file eksekusi, Windows beban dinamis link perpustakaan (DLL), membuat semua fungsi yang tersedia untuk aplikasi Anda. Pada waktu itu, Windows menyelesaikan alamat dari masing-masing fungsi dan dinamis link ke aplikasi Anda. Custom semua kontrol yang digunakan dalam Visual Basic yang dll. Satu-satunya perbedaan adalah bahwa mereka memerlukan penanganan khusus dari pesan yang diterima dari Visual Basic. 1.1 Mengapa menggunakan dll?Berikut adalah empat alasan mengapa Anda mungkin ingin menggunakan DLL:
1.2 Anatomi DLLSetiap DLL harus berisi LibMain fungsi dan harus berisi keluar Windows Prosedur (WEP) Selain untuk diekspor fungsi yang dapat dipanggil oleh sebuah program yang dapat dijalankan.
1.3 Isu-isu manajemen memori DLLMenggunakan model memori yang besar.C menyimpan semua variabel yang didefinisikan sebagai statis atau global (didefinisikan di luar fungsi) di program tumpukan ruang, dan c menyimpan semua variabel lain pada tumpukan. Dalam model kecil dan menengah, semua pointer adalah dekat secara default. Ini berarti bahwa data yang diakses oleh 16-bit offset ke salah satu segmen data (DS) pendaftaran, atau tumpukan segmen (SS) mendaftar. Sayangnya, Kompilator tidak memiliki cara untuk mengetahui apakah offset dari DS atau SS. Dalam sebagian besar program ini tidak akan menjadi masalah karena DS dan SS menunjuk ke segmen yang sama. DLL, bagaimanapun, adalah kasus khusus. DLL telah segmen data sendiri tetapi berbagi dengan tumpukan dengan panggilan program. Ini berarti bahwa DS dan SS tidak menunjukkan sama yang baru. Solusi yang termudah untuk masalah ini adalah untuk membangun DLL model memori besar di mana semua variabel yang direferensikan oleh nilai 32-bit. Mengapa mengalokasikan memori dinamis?Mengalokasikan memori dinamis adalah teknik Windows-ramah. Menyatakan array besar data mengambil ruang di salah satu program Anda tumpukan, yang terbatas 64 K, atau Anda program Data segmen, yang boros ruang disk dan Windows memori. Lebih baik untuk meminta Windows memori ketika Anda membutuhkannya, dan kemudian gratis bila Anda telah selesai.Mengalokasikan memoriPada Windows, Anda dapat mengalokasikan secara dinamis dua jenis memori, lokal dan global. Memori lokal terbatas untuk 64 K, dan dalam kasus DLL, lokal memori bersama dengan program yang disebut DLL. Memori global semua memori yang tersedia untuk Windows setelah itu telah dimuat.Lokal memori dialokasikan dan berhasil menggunakan LocalAlloc, LocalLock LocalUnlock, dan LocalFree fungsi--seperti dalam contoh ini: Global memori dialokasikan dan berhasil menggunakan GlobalAlloc, GlobalLock GlobalUnlock, dan GlobalFree fungsi--seperti dalam contoh ini: Jika Anda ingin berbagi memori dialokasikan dalam DLL dengan program lain, Anda harus mengalokasikan menggunakan bendera GMEM_SHARED. Jika Anda ingin berbagi memori melalui DDE, Anda harus mengalokasikan itu dengan menggunakan bendera GMEM_DDESHARE. Berhati-hati ketika menyimpan Data dalam variabel statisJika Anda mencoba untuk menyimpan data dalam DLL menggunakan variabel global atau statis, tidak akan terkejut jika nilai-nilai ini telah berubah ketika Anda selanjutnya menelepon Anda DLL. The data yang disimpan dalam cara ini akan menjadi umum untuk semua aplikasi yang mengakses DLL. tidak peduli berapa banyak aplikasi menggunakan DLL, ada hanya satu contoh dari DLL. Cara terbaik untuk melakukannya adalah untuk kembali struktur dari DLL dan melewati mereka di lagi ketika mereka dibutuhkan.Menangani fileHal ini tidak mungkin untuk berbagi file menangani antara aplikasi atau dll. Setiap aplikasi ini memiliki tabel file-menangani sendiri. Untuk dua aplikasi untuk menggunakan sama file menggunakan DLL, mereka harus baik membuka file secara individual.1.4 Membangun DLL menggunakan Visual C++Berikut adalah langkah-langkah yang diperlukan untuk membangun DLL menggunakan Visual C++:
1.5 Contoh C DLLDLL berikut berisi GetDiskInfo fungsi, yang dapat disebut dari Visual Basic. Itu akan kembali ruang disk yang tersedia, saat ini drive nama dan nama volume.Perpustakaan diskinfo Catatan: Nama perpustakaan di.DEF berkas harus sama dengan DLL file
nama, atau Visual Basic akan memberi Anda "Kesalahan dalam loading DLL." Untuk
contoh, membuat file DISKINFO.DLL menggunakan pernyataan perpustakaan DISKINFO
dalam.DEF file di atas.Deskripsi 'GetDiskInfo dapat dipanggil dari Visual Basic' EXETYPE WINDOWS 3.1 KODE PRELOAD LITURGI DISCARDABLE DATA PRELOAD TUNGGAL DAPAT DIPINDAH-PINDAHKAN HEAPSIZE 4096 EKSPOR GetDiskInfo @ 1 BAGIAN B2.0 Memanggil dll dari Visual BasicDalam Visual Basic, semua fungsi, termasuk fungsi DLL, yang ingin Anda panggilan pertama akan dinyatakan dengan menggunakan pernyataan menetapkan. Anda dapat menyatakan fungsi Anda di bagian Deklarasi bentuk atau modul. Jika Anda menyatakan DLL prosedur atau fungsi dalam bentuk, pribadi untuk bentuk. Untuk membuat publik, Anda harus melaporkannya dalam modul. Berikut adalah contoh menetapkan pernyataan:Setelah Anda menyatakan fungsi, Anda dapat memanggil dan menggunakan fungsi seperti Anda akan menelepon dan menggunakan fungsi Visual Basic. 2.1 DLL parameterKarena dll biasanya ditulis dalam C, dll dapat menggunakan berbagai parameter tidak secara langsung didukung oleh Visual Basic. Akibatnya, ketika memberikan parameter, programmer harus menemukan jenis data yang sesuai untuk lulus.Lewat argumen dengan nilai atau referensiSecara default, Visual Basic melewati semua argumen oleh referensi. (Ketika melewati oleh referensi, Visual Basic persediaan 32-bit alamat jauh.) Namun, banyak Fungsi DLL mengharapkan sebuah argumen untuk diteruskan oleh nilai. Ini dapat dicapai dengan menempatkan kata kunci ByVal di depan Deklarasi argumen.Bagian berikut menunjukkan kepada Anda bagaimana untuk mengubah parameter ke Visual Basic. 8-16 Bit numerik parameterMelewati parameter angka 8-16 bit (int, pendek, unsigned int, ditandatangani pendek, BOOL, dan kata) sebagai Integer.Parameter angka 32-bitMelewati parameter angka 32-bit (lama, ditandatangani lama, dan DWORD) sepanjang.Menangani objekMenangani semua adalah nilai-nilai unik 16-bit integer yang terkait dengan jendela dan dilewati oleh nilai, sehingga melewati parameter ini sebagai Integer.StringString termasuk tipe data LPSTR dan LPBYTE (pointer ke karakter atau pointer ke unsigned karakter). Melewati parameter ini sebagai (ByVal paramname Sebagai String). Untuk lulus Visual Basic string langsung, melewati mereka sebagai (param sebagai String).Untuk informasi tambahan mengenai lewat string antara Visual Basic and C DLL, silakan lihat artikel berikut pada Basis Pengetahuan Microsoft: 118643
(http://support.microsoft.com/kb/118643/EN-US/
)
Bagaimana untuk melewati sebuah String atau String array antara VB dan C DLL Catatan: Visual Basic string memerlukan penanganan khusus, sehingga tidak lulus string
langsung kecuali DLL secara eksplisit membutuhkan itu.Petunjuk untuk nilai-nilai numerikLewat petunjuk untuk nilai-nilai numerik hanya tidak menggunakan kata kunci ByVal.StrukturApakah Visual Basic buatan pengguna jenis sesuai dengan struktur yang diharapkan oleh DLL, struktur dapat disahkan oleh referensi.Catatan: Struktur tidak disahkan oleh nilai. Petunjuk untuk arrayLewat elemen pertama dari array referensi.Pointer ke fungsiVisual Basic tidak mendukung fungsi panggilan balik, sehingga DLL fungsi yang memiliki pointer ke fungsi tidak dapat digunakan dengan Visual Basic.Null pointerJika DLL mengharapkan Null pointer, lulus sebagai (ByVal paramname sebagai apapun). Anda dapat menggunakan 0 & sebagai nilai paramname ketika memanggil DLL.2.2 Pemecahan masalahBerikut adalah solusi untuk masalah Anda mungkin mengalami.Sumber daya sistem terus mendapatkan lebih rendah setelah DLL disebutJika Anda DLL menggunakan GDI objek, Anda harus ingat untuk membebaskan mereka setelah menggunakan mereka. Ini mungkin tidak jelas dalam Visual Basic, tapi ketika menggunakan Windows SDK (software development kit) jika Anda membuat objek GDI (untuk contoh, CreateBrushIndirect), Anda harus menghapusnya dengan menggunakan DeleteObject kemudian hari.Buruk DLL panggilan Konvensi kesalahanKesalahan ini sering disebabkan oleh salah menghilangkan atau termasuk ByVal kata kunci dari pernyataan menetapkan. Kesalahan ini juga dapat disebabkan apabila salah parameter berlalu.Kesalahan dalam Loading DLLKesalahan ini terjadi bila Anda memanggil prosedur dynamic-link perpustakaan dan file yang ditentukan dalam prosedur menetapkan pernyataan tidak dimuat. Anda dapat menggunakan Microsoft Windows API fungsi LoadLibrary untuk mengetahui lebih lanjut informasi spesifik tentang mengapa DLL gagal untuk memuat.Umum perlindungan (GP) kesalahanGP kesalahan terjadi ketika program Anda menulis untuk blok memori yang tidak milik itu. Dua kemungkinan alasan untuk ini adalah:
2.3 Contoh Visual Basic panggilan ProgramAda dua bagian untuk memanggil DLL dalam Visual Basic program. Pertama Anda menyatakan fungsi, dan kemudian Anda menggunakannya di acara kode.Berikut adalah contoh dari pernyataan menetapkan. Menetapkan pernyataan harus menempatkan dalam modul atau dalam bentuk umum Deklarasi bagian. Setelah fungsi menyatakan, Anda dapat menggunakannya di acara kode. Berikut contoh menggunakan fungsi dari DLL dalam acara Command1 klik kode:
Penerjemahan MesinPENTING: 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:106553
(http://support.microsoft.com/kb/106553/en-us/
)
| Sumber Lain Situs Pendukung Lain
KomunitasCari Bantuan SekarangTerjemahan Artikel
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Kembali ke atas
