Makale numarası: 189133 - Son Gözden Geçirme: 01 Temmuz 2004 Perşembe - Gözden geçirme: 4.1

Nasıl yapılır: C DLL VB ile bir tür kitaplığı için daha erişilebilir yapma

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Ilk yayınlandığından bu yana DECLARE bildirimi olarak c gibi başka dillerde yazılan bir DLL işlevi yararlanmak için Visual Basic sağladı. Ancak Declare ifadeleri mükemmel'den küçük ve genellikle DLL hakkında daha fazla gibi Visual Basic kodu hakkında bilmeniz gerekir. Bir tür kitaplığı, verilen C işlevlerini çağıran bir daha fazla Visual Basic kolay yolu oluşturur.

Bu makalede, DLL ve nasıl yapılır: Bu kitaplığı Visual gelen başvuru oluşturduğunuzda, bir tür kitaplığı Basic oluşturulması gösterilmiştir.

Daha fazla bilgi

Tür kitaplıkları Otomasyonu içinde kullanılan bileşik belge (.tlb dosyaları) dosyalarıdır. Bunlar, türleri, nesneleri, modüller ve istemcileri için bir Otomasyon sunucusu tarafından gösterilen arabirim hakkında önemli bilgiler içerir. Neyse ki, bir sunucu Otomasyon bir tür kitaplığı olanaklarından yararlanacak şekilde duyarlı olması gerekmez. Aslında, birçok C dll Otomasyon sunucularıdır değil. Tüm gerekli olan, DLL C bir tür kitaplığı bir modülde bir üyesi olarak işlevlerini bildirmek. Visual Basic gibi bir Otomasyon istemcisi bu bilgileri okuyun ve herhangi bir nesne gibi kendisine bağlayabilirsiniz. Sabitler, çünkü tüm iş Visual Basic yapar anımsanması gerek Declare ifadeleri veya sabit.

Bir tür kitaplığı, dll DOSYASı oluşturulurken çeşitli yararları vardır. Bunlardan en önemli daha iyi bir tür güvenliği var. Ancak, Visual Basic, erken bağlama kullanarak işlevlerinizi otomatik olarak bağlar için de avantajı, daha iyi performans için aldığınız. Buna ek olarak, tüm Declare ifadeleri sonradan bağlanan ' dir. Ayrıca, Visual Basic programcıları için DLL dosyanızın sunulan biçimi üzerinde daha fazla denetim elde edersiniz. Tür kitaplığı Visual Basic kolay adları işlevleri ve numaralandırma ve kullanıcı tanımlı türler (UDTs) gibi yararlı ek özellikler ile birlikte, parametre girmenizi sağlar.

Şimdilik, tür kitaplıklarının arabirim tanımlama dili (IDL) veya nesne Açıklama Dili (ODL) yazılmış komut dosyalarını kullanarak oluşturulur. Bu komut dosyaları MkTypLib.EXE veya Visual Studio ile birlikte gelen MIDL.EXE derlenir. Visual C++ projenizi derlerken DLL projenizi ilişkilendiren ODL dosyaları otomatik olarak ile MIDL derleneceği nedeniyle bazı tür kitaplıklarının, oluşturma, iş alır.

Adım adım örnek - DLL ve tür kitaplığı oluştur

  1. Visual C++ 5.0'nı açın ve File|New seçin. Projeler sekmesinde, "Win32 dinamik bağlantı kitaplığı" seçin ve "TLBSamp" proje adı
  2. File|New yeniden seçin. Dosyalar sekmesindeki "C++ kaynak dosyası," <a1>Ad</a1> "TLBSamp.c" dosyasını seçin ve TAMAM'A basın.
  3. 2. Adımda yeniden ve bu süre choose "Metin dosyası" dosya türü olarak'yi yineleyin. Sırasıyla "TLBSamp.def" ve "TLBSamp.odl" olarak adlandırın.
  4. Ardından, aşağıdaki kodu için TLBSamp.c ekleyin:
          #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. Işlevleri verilebilir yapmak için TLBSamp.def aşağıdakileri ekleyin:
          LIBRARY TLBSamp
          DESCRIPTION 'Microsoft KB Sample DLL'
          EXPORTS
            MyDll_ReverseString
            MyDll_Rotate
    
    						
  6. Bilgisayarınızı bir tür kitaplığı işlevlerini TLBSamp.odl için aşağıdaki ekleyerek bildirin:
          // 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. DLL ve tür kitaplığınıza yapı) menüsünde "Tümünü yeniden" seçerek derleyin. Tamamlandığında, yeni DLL (TLBSamp.dll) sınamak için Visual Basic dizininize kopyalayın.
Not: bir konular, kullanışlı bir kaynak DLL dosyanızın tipi kitaplığınıza eklemek isteyebilirsiniz. Bu, Visual Basic geliştiricilerine TLB ayrı bir dosyaya dağıtmak zorunda boşaltmanız.

Kitaplık, bir kaynak olarak eklemek için aşağıdaki adımları izleyin:
  1. File|New seçin. Dosyalar sekmesindeki "TLBSamp.rc" "Metin dosyası," <a1>Ad</a1> dosyasını seçin ve TAMAM'A basın.
  2. Görüntülenen metin penceresinde, aşağıdaki satırı ekleyin:

    1 typelib TLBSamp.tlb
  3. Dosyayı kaydedin ve kendi DLL'i yeniden derleyin. Tamamlandığında, yeni DLL (TLBSamp.dll) sınama; Visual Basic dizininize kopyalayın istemde bulunulursa, önceki dosyanın üzerine yazılsın.

Adım adım örnek - Visual Basic sınama uygulaması

  1. DLL ve tür kitaplığınıza sınamak için Visual Basic 5. 0'ı açın ve yeni bir standart proje oluşturmak için kullanın. Varsayılan olarak, Form1 oluşturulur.
  2. Proje menüsünden çağırmak için başvurular seçin başvuruları iletişim kutusunu tıklatın ve sonra bir kaynak olarak kitaplığı eklediyseniz, yeni bir tür kitaplığı'nı (veya kendi DLL) bulmak için Gözat. Dosyayı bulduktan sonra Tamam'ı tıklatın. Visual Basic otomatik kitaplık için ilk kez, başvuru kaydeder. Emin kitaplığınızın ("KB örnek: bilgisayarınızın C DLL daha erişilebilir yapma") formüllerdeki başvurular listesi denetlendi ve iletişim kutusunu kapatın.
  3. Nesne Tarayıcı duruma getirmek için F2 tuşuna basın. Dikkat kitaplığınızın (TLBSamp), Visual Basic projesine eklenmiş ve yalnızca, yerel bir Visual Basic işlevleri gibi işlevlerinizi şimdi çağrılabilir. Geliştirici BitRotate için <a1>Yön</a1> parametresinde yazarken Visual Basic bile numaralandırma listenizin bırak işlevi.
  4. Form1'e bir KomutDüğmesi ekleyin ve bu düğmenin tıklatın aşağıdaki kodu ekleyin olay:
          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. Şimdi ıDE'DE vb5allB proje çalıştırmak için F5 tuşuna basın.

    Not: bir hata iletisi alırsanız, Visual Basic DLL dosyanızın bulunamıyor olabilir. Bilgisayarınızı sınama uygulaması çalıştırmadan önce Visual Basic dizin ya da sistem yolunuzu kopyaladığınız emin olun.

Referanslar

ODL veya IDL yapısı hakkında ek bilgi için lütfen Microsoft Developer Network (MSDN) Kitaplığı'ndaki aşağıdaki makalelere bakın:
BAŞLıK: Kitaplıkları ve nesne Açıklama Dili yazın...
BAŞLıK: Arabirim tanımları ve tür kitaplıkları

Ek bilgi için lütfen aşağıdaki Microsoft Knowledge Base'deki makaleleri bakın:
143258  (http://support.microsoft.com/kb/143258/EN-US/ ) : Sabitleri ve DLL bildirimleri bir tür kitaplığında oluşturma

122285  (http://support.microsoft.com/kb/122285/EN-US/ ) : Nasıl tür kitaplıkları .dll ve .exe dosyaları için kaynak eklenir.

142840  (http://support.microsoft.com/kb/142840/EN-US/ ) : Verilen DLL işlevler için Visual Basic gereksinimleri

(c) Microsoft Corporation 1998, tüm hakları saklıdır. Tarafından katkıyı Richard R'ye Taylor, Microsoft Corporation

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.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
Anahtar Kelimeler: 
kbmt kbhowto KB189133 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:189133  (http://support.microsoft.com/kb/189133/en-us/ )