ID Artikel: 189133 - Kajian Terakhir: 20 September 2011 - Revisi: 2.0

Bagaimana membuat C DLL lebih mudah diakses oleh VB dengan perpustakaan jenis

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Sejak rilis pertama, Visual Basic telah memberikan pernyataan menetapkan sebagai sarana bagi Anda untuk mengambil keuntungan dari fungsi DLL yang ditulis di lain bahasa, seperti C. Tetapi pernyataan menetapkan kurang sempurna dan sering meminta Anda untuk tahu lebih banyak tentang DLL seperti yang Anda lakukan tentang Visual Dasar kode. Perpustakaan jenis menciptakan sebuah cara yang lebih ramah Visual Basic dari panggilan diekspor c fungsi.

Artikel ini menunjukkan cara membuat perpustakaan jenis ketika Anda membangun Anda DLL, dan bagaimana untuk referensi Perpustakaan itu dari Visual Basic.

INFORMASI LEBIH LANJUT

Jenis perpustakaan adalah senyawa dokumen file (file .tlb) digunakan dalam otomatisasi. Mereka berisi informasi penting tentang jenis, objek, modul, dan antarmuka terkena oleh server Otomatisasi kepada klien. Untungnya, server tidak perlu otomatisasi-sadar untuk mengambil keuntungan dari jenis perpustakaan. Pada kenyataannya, kebanyakan c dll tidak server Otomatisasi. Semua itu diperlukan adalah bahwa C DLL menyatakan fungsinya sebagai anggota dari modul di Perpustakaan jenis. Klien otomasi, seperti Visual Basic, dapat membaca ini informasi dan mengikat untuk itu karena akan benda. Tidak perlu untuk menetapkan pernyataan atau sulit untuk mengingat konstanta karena Visual Basic tidak semua bekerja.

Ada beberapa keuntungan dalam menciptakan perpustakaan jenis untuk Anda DLL. The paling penting dari ini adalah lebih baik jenis keamanan. Tapi Anda juga mendapatkan keuntungan performa yang lebih baik, karena Visual Basic secara otomatis mengikat untuk fungsi Anda menggunakan ikatan. Sebaliknya, semua pernyataan menetapkan akhir-terikat. Selain itu, Anda mendapatkan lebih besar kontrol atas cara Anda DLL disajikan untuk Visual Basic programer. Perpustakaan jenis memungkinkan Anda untuk memberikan nama ramah Visual Basic untuk fungsi dan parameter, bersama dengan membantu ekstra seperti enumerasi dan jenis ditetapkan pengguna (UDTs).

Saat ini, jenis perpustakaan yang dibuat menggunakan skrip yang ditulis dengan baik Antarmuka definisi bahasa (IDL) atau bahasa objek keterangan (ODL). Script ini kemudian dikumpulkan menggunakan MkTypLib.EXE atau MIDL.EXE yang datang dengan Visual Studio. Visual c ++ mengambil beberapa pekerjaan dari menciptakan Ketik perpustakaan, karena ODL setiap file yang Anda asosiasikan dengan Anda DLL proyek akan secara otomatis mengumpulkan dengan MIDL ketika Anda mengkompilasi Anda proyek.

Langkah demi langkah contoh - membuat DLL dan perpustakaan jenis

  1. Buka Visual C++ 5.0 dan pilih File|Baru. Pada tab proyek, pilih "Win32 Dynamic-Link Perpustakaan" dan nama proyek "TLBSamp."
  2. Pilih File|Baru lagi. Pada tab file, pilih "File sumber C++" nama file "TLBSamp.c", dan tekan OK.
  3. Ulangi langkah 2 lagi, dan kali ini pilih "File teks" sebagai jenis berkas. Nama file "TLBSamp.def" dan "TLBSamp.odl" masing-masing.
  4. Selanjutnya, tambahkan kode berikut untuk TLBSamp.c:
          #include <windows.h>
    
          // MyDll_ReverseString -- Reverses the characters of a given string
          void __stdcall MyDll_ReverseString(LPSTR lpString)
          {
             _strrev(lpString);
          }
    
          // MyDLL_Rotate -- Returns bit rotation of 32-bit integer value
          int __stdcall MyDll_Rotate(int nVal, int nDirect, short iNumBits)
          {
             int nRet = 0;
    
             if((iNumBits < 1) || (iNumBits > 31))
                return nRet;
    
             switch(nDirect)
             {
             case 0:
                // Rotate nVal left by iNumBits
                nRet = (((nVal) << (iNumBits)) |
                        ((nVal) >> (32-(iNumBits))));
                break;
             case 1:
                // Rotate nVal right by iNumBits
                nRet = (((nVal) >> (iNumBits)) |
                        ((nVal) << (32-(iNumBits))));
                break;
             }
    
             return nRet;
          }
    
    						
  5. Untuk membuat fungsi ekspor, tambahkan baris berikut ke TLBSamp.def:
          LIBRARY TLBSamp
          DESCRIPTION 'Microsoft KB Sample DLL'
          EXPORTS
            MyDll_ReverseString
            MyDll_Rotate
    
    						
  6. Menyatakan Anda fungsi di perpustakaan jenis dengan menambahkan berikut untuk TLBSamp.odl:
          // This is the type library for TLBSamp.dll
          [
          // Use GUIDGEN.EXE to create the UUID that uniquely identifies
          // this library on the user's system. NOTE: This must be done!!
             uuid(F1B9E420-F306-11d1-996A-92FF02C40D32),
          // This helpstring defines how the library will appear in the
          // References dialog of VB.
             helpstring("KB Sample: Make your C DLL More Accessible"),
          // Assume standard English locale.
             lcid(0x0409),
          // Assign a version number to keep track of changes.
             version(1.0)
          ]
          library TLBSample
          {
    
          // Define an Enumeration to use in one of our functions.
          typedef enum tagRotateDirection
          {
             tlbRotateLeft=0,
             tlbRotateRight=1
          }RotateDirection;
    
          // Now define the module that will "declare" your C functions.
          [
             helpstring("Sample functions exported by TLibSamp.dll"),
             version(1.0),
          // Give the name of your DLL here.
             dllname("TLBSamp.dll")
          ]
          module MyDllFunctions
          {
    
             [
             // Add a description for your function that the developer can
             // read in the VB Object Browser.
                helpstring("Returns the reverse of a given string."),
             // Specify the actual DLL entry point for the function. Notice
             // the entry field is like the Alias keyword in a VB Declare
             // statement -- it allows you to specify a more friendly name
             // for your exported functions.
                entry("MyDll_ReverseString")
             ]
             // The [in], [out], and [in, out] keywords tell the Automation
             // client which direction parameters need to be passed. Some
             // calls can be optimized if a function only needs a parameter
             // to be passed one-way.
             void __stdcall ReverseString([in, out] LPSTR sMyString);
    
             [
                helpstring("Rotates a Long value in the given direction."),
                entry("MyDll_Rotate")
             ]
             // Besides specifying more friendly names, you can specify a more
             // friendly type for a parameter. Notice the Direction parameter
             // has been declared with our enumeration. This gives the VB
             // developer easy access to our constant values.
             int __stdcall BitRotate([in] int Value,
                                     [in] RotateDirection Direction,
                                     [in] short Bits);
    
          } // End of Module
          }; // End of Library
    
    						
  7. Menyusun perpustakaan Anda DLL dan jenis dengan memilih "Membangun kembali semua" dari Membangun menu. Ketika selesai, salin DLL yang baru (TLBSamp.dll) untuk Visual Direktori dasar untuk pengujian.
Catatan: Sebagai masalah kenyamanan, Anda mungkin ingin menyertakan perpustakaan jenis dalam Anda DLL sebagai sumber daya. Ini akan membebaskan Anda dari keharusan untuk mendistribusikan memisahkan TLB file untuk pengembang Visual Basic.

Untuk menambahkan perpustakaan sebagai sumber daya, lengkap langkah-langkah berikut:
  1. Pilih File|Baru. Pada tab file, pilih "File teks," nama file "TLBSamp.rc", dan tekan OK.
  2. Di jendela teks yang muncul Tambahkan baris berikut:

    1 typelib TLBSamp.tlb
  3. Simpan file dan mengkompilasi ulang Anda DLL. Ketika selesai, salin baru DLL (TLBSamp.dll) ke direktori Visual Basic untuk pengujian; menimpa berkas sebelumnya jika diminta.

Langkah demi langkah contoh - Visual Basic tes App

  1. Untuk menguji Anda DLL dan jenis perpustakaan, membuka Visual Basic 5.0 dan membuat Proyek standar yang baru. Form1 dibuat secara default.
  2. Dari proyek menu, pilih referensi untuk memanggil referensi dialog kotak, dan kemudian klik Browse untuk mencari perpustakaan jenis baru Anda (atau Anda DLL jika Anda menambahkan perpustakaan sebagai sumber daya). Sekali Anda telah itu, tekan OK. Visual Basic akan secara otomatis mendaftar perpustakaan untuk Anda pertama kali Anda referensi. Pastikan bahwa perpustakaan Anda ("KB Contoh: membuat Anda C DLL lebih mudah diakses ") telah diperiksa referensi daftar, dan kemudian tutup kotak dialog.
  3. Tekan tombol F2 untuk memunculkan Browser objek. Perhatikan bahwa perpustakaan Anda (TLBSamp) telah ditambahkan ke proyek Visual Basic, dan bahwa Anda fungsi dapat sekarang disebut hanya seolah-olah asli Visual Basic fungsi. Visual Basic bahkan akan drop-down enumerasi Anda daftar ketika pengembang mengetik dalam arah parameter untuk BitRotate fungsi.
  4. Tambah CommandButton pada Form1 dan tambahkan kode berikut tombol 's Klik acara:
          Private Sub Command1_Click()
             Dim n1 As Long, n2 As Long, nTmp As Long
             Dim sTest As String, sMsg As String
    
             sTest = "Hello World!"
             n1 = 100
    
             ReverseString sTest
               sMsg = sTest & " | "
             ReverseString sTest
               sMsg = sMsg & sTest & vbCrLf
    
             nTmp = BitRotate(n1, tlbRotateLeft, 2)
             n2 = BitRotate(nTmp, tlbRotateRight, 2)
               sMsg = sMsg & Str$(n1) & " : " & Str$(nTmp) & " : " & Str$(n2)
    
             MsgBox sMsg
          End Sub
    
    						
  5. Sekarang tekan tombol F5 untuk menjalankan projek vb5allB di IDE.

    Catatan: Jika Anda menerima pesan galat, mungkin karena Visual Basic tidak dapat menemukan Anda DLL. Pastikan Anda telah disalin ke Visual Basic direktori atau jalur sistem Anda sebelum Anda menjalankan aplikasi tes Anda.

REFERENSI

Untuk informasi tambahan mengenai struktur ODL atau IDL, silakan lihat artikel berikut di perpustakaan Microsoft Developer Network (MSDN):
Judul: Ketik perpustakaan dan bahasa deskripsi objek
Judul: Antarmuka definisi dan jenis perpustakaan

Untuk informasi tambahan, silakan lihat artikel berikut di Basis Pengetahuan Microsoft:
143258  (http://support.microsoft.com/kb/143258/EN-US/ ) : Cara membuat konstanta dan Deklarasi DLL di perpustakaan jenis

122285  (http://support.microsoft.com/kb/122285/EN-US/ ) : Bagaimana untuk menambahkan jenis perpustakaan sebagai sumber daya untuk berkas .dll dan .exe

142840  (http://support.microsoft.com/kb/142840/EN-US/ ) : Persyaratan Visual Basic untuk fungsi-fungsi diekspor DLL

(c) Microsoft Corporation 1998, All Rights Reserved. Kontribusi oleh Richard R. Taylor, Microsoft Corporation

Berlaku bagi:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Kata kunci: 
kbhowto kbmt KB189133 KbMtid
Penerjemahan MesinPenerjemahan 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:189133  (http://support.microsoft.com/kb/189133/en-us/ )