ΔΙΑΔΙΚΑΣΙΕΣ: Δημιουργία C DLL ευκολότερης πρόσβασης σε VB με μια βιβλιοθήκη τύπων

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 189133 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Μετά την πρώτη έκδοση, Visual Basic έδωσε την πρόταση Declare ως μέσο για να εκμεταλλευτείτε τις λειτουργίες DLL που γράφονται σε άλλες γλώσσες, όπως γ. Αλλά δηλώσεις Declare είναι λιγότερο από τέλειο και συχνά απαιτεί γνώσεις όσο περισσότερα σχετικά με το αρχείο DLL όπως κάνετε σχετικά με κώδικα της Visual Basic. Μια βιβλιοθήκη τύπων δημιουργεί περισσότερες τρόπο φιλικό με Visual Basic από την κλήση του εξαγόμενου C συναρτήσεις.

Αυτό το άρθρο επιδεικνύει τον τρόπο δημιουργίας μιας βιβλιοθήκης τύπων κατά τη δημιουργία του αρχείου DLL και με την αναφορά σε αυτή τη βιβλιοθήκη από το Visual Basic.

Περισσότερες πληροφορίες

Βιβλιοθήκες τύπων είναι σύνθετο έγγραφο αρχεία (αρχεία .tlb) χρησιμοποιείται σε αυτοματισμού. Περιέχουν σημαντικές πληροφορίες σχετικά με τους τύπους, αντικείμενα, λειτουργικές μονάδες και διασυνδέσεις που εκτίθενται από ένα διακομιστή αυτοματοποίησης στους υπολογιστές-πελάτες. Ευτυχώς, ένας διακομιστής δεν πρέπει να αυτοματισμού-γνωρίζετε για να επωφεληθείτε από μια βιβλιοθήκη τύπων. Στην πραγματικότητα, οι περισσότερες βιβλιοθήκες DLL C δεν είναι διακομιστές αυτοματοποίησης. Το μόνο που απαιτείται είναι ότι το αρχείο DLL C δηλώνουν τις λειτουργίες του ως μέλη μιας λειτουργικής μονάδας σε μια βιβλιοθήκη τύπων. Ένα πρόγραμμα-πελάτη αυτοματισμού, όπως η Visual Basic, να διαβάσετε αυτές τις πληροφορίες και σύνδεση όπως κάνατε σε οποιοδήποτε αντικείμενο. Δεν απαιτείται για δηλώσεις Declare ή σκληρά θυμάστε σταθερές επειδή Visual Basic κάνει όλη την εργασία.

Υπάρχουν πολλά πλεονεκτήματα στη δημιουργία μιας βιβλιοθήκης τύπων για το αρχείο DLL. Το πιο σημαντικό από αυτά είναι καλύτερη ασφάλεια τύπου. Αλλά λαμβάνετε επίσης το πλεονέκτημα της καλύτερες επιδόσεις, επειδή συνδέει αυτόματα της Visual Basic για να σας λειτουργίες χρησιμοποιώντας την πρώτη σύνδεση. Αντίθετα, όλες οι δηλώσεις Declare είναι με καθυστερημένη σύνδεση. Επιπλέον, μπορείτε να αποκτήσετε μεγαλύτερο έλεγχο του τρόπου που παρουσιάζεται το αρχείο DLL για προγραμματιστές της Visual Basic. Η βιβλιοθήκη τύπων σάς επιτρέπει να παρέχετε ονομάτων φιλικών της Visual Basic για συναρτήσεις και παραμέτρους, μαζί με χρήσιμες έξτρα όπως τύπων καθορισμένο από τον χρήστη (UDTs) και απαριθμήσεις.

Προς το παρόν, βιβλιοθήκες τύπων που δημιουργούνται με δέσμες ενεργειών που είναι γραμμένο σε γλώσσα περιγραφής αντικειμένου (ODL) είτε Ορισμός γλώσσας περιβάλλοντος εργασίας (IDL). Αυτές οι δέσμες ενεργειών είναι στη συνέχεια μεταγλώττιση χρησιμοποιώντας MkTypLib.EXE ή MIDL.EXE που συνοδεύουν το Visual Studio. Το Visual C++ λαμβάνει μέρος της εργασίας από τη δημιουργία βιβλιοθηκών τύπου, επειδή τα αρχεία ODL που μπορείτε να συσχετίσετε με το έργο σας DLL θα να μεταγλωττιστεί αυτόματα με MIDL κατά τη μεταγλώττιση του έργου σας.

Παράδειγμα βήμα προς βήμα - δημιουργία το DLL και η βιβλιοθήκη τύπων

  1. Ανοίξτε το Visual C++ 5.0 και επιλέξτε File|New. Στη σελίδα "Έργα", επιλέξτε "Win32 βιβλιοθήκης δυναμικής σύνδεσης" και ονομάστε το έργο "TLBSamp".
  2. Επιλέξτε File|New ξανά. Στην καρτέλα "αρχεία", επιλέξτε "C++ προέλευση αρχείου," όνομα αρχείου "TLBSamp.c" και πατήστε το κουμπί OK.
  3. Επαναλάβετε ξανά το βήμα 2 και το χρόνο επιλογής "Αρχείο κειμένου" ως τύπο αρχείου. Το όνομα των αρχείων "TLBSamp.def" και "TLBSamp.odl" αντίστοιχα.
  4. Στη συνέχεια, προσθέστε τον ακόλουθο κώδικα 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. Για να κάνετε τις λειτουργίες δυνατότητα εξαγωγής, προσθέστε τα ακόλουθα TLBSamp.def:
          LIBRARY TLBSamp
          DESCRIPTION 'Microsoft KB Sample DLL'
          EXPORTS
            MyDll_ReverseString
            MyDll_Rotate
    
    						
  6. Δηλώστε το συναρτήσεις σε μια βιβλιοθήκη τύπων, προσθέτοντας την ακόλουθη 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. Μεταγλώττιση τη βιβλιοθήκη DLL και τον τύπο, επιλέγοντας "Αναδόμηση όλων" από το μενού της δομής. Όταν ολοκληρωθεί, αντιγράψτε το νέο αρχείο DLL (TLBSamp.dll) στον κατάλογο της Visual Basic για τη δοκιμή.
ΣΗΜΕΙΩΣΗ: Ως θέμα άνεση, ίσως θελήσετε να συμπεριλάβετε σας βιβλιοθήκης τύπων σε σας DLL ως πόρο. Αυτό θα έχετε ελεύθερο από την υποχρέωση να διανείμετε ένα ξεχωριστό αρχείο TLB σας τους προγραμματιστές της Visual Basic.

Για να προσθέσετε στη βιβλιοθήκη ως πόρος, ολοκληρώστε τα παρακάτω βήματα:
  1. Επιλέξτε File|New. Στην καρτέλα "αρχεία", επιλέξτε "Αρχείο κειμένου," όνομα αρχείου "TLBSamp.rc" και πατήστε το κουμπί OK.
  2. Στο παράθυρο "κείμενο" που εμφανίζεται προσθέστε την ακόλουθη γραμμή:

    1 βιβλιοθήκη τύπων TLBSamp.tlb
  3. Αποθηκεύστε το αρχείο και να μεταγλωττίσετε ξανά το αρχείο DLL. When complete, copy the new DLL (TLBSamp.dll) to your Visual Basic directory for testing; overwrite the previous file if prompted.

Step-by-Step Example - The Visual Basic Test App

  1. To test your DLL and type library, open Visual Basic 5.0 and create a new standard Project. Φόρμα1 δημιουργείται από προεπιλογή.
  2. From the Project menu, select References to call up the References dialog box, and then click Browse to find your new type library (or your DLL if you added the library as a resource). Once you have located it, press OK. Visual Basic will automatically register the library for you the first time you reference it. Make sure that your library ("KB Sample: Make your C DLL More Accessible") has been checked in the references List, and then close the dialog box.
  3. Press the F2 key to bring up the Object Browser. Note that your library (TLBSamp) has been added to the Visual Basic project, and that your functions can now be called just as if they were native Visual Basic functions. Visual Basic will even drop down your enumeration list when the developer is typing in the Direction parameter to the BitRotate function.
  4. Add a CommandButton to Form1 and add the following code the button's click event:
          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. Now press the F5 key to run the vb5allB project in the IDE.

    ΣΗΜΕΙΩΣΗ: Εάν λάβετε ένα μήνυμα λάθους, ίσως επειδή η Visual Basic δεν μπορεί να βρει το αρχείο DLL. Make sure you have copied it to the Visual Basic directory or your system path before you run your test app.

Αναφορές

For additional information on the structure of ODL or IDL, please see the following articles in the Microsoft Developer Network (MSDN) Library:
TITLE : Type Libraries and the Object Description Language
TITLE : Interface Definitions and Type Libraries

Για πρόσθετες πληροφορίες, ανατρέξτε στα ακόλουθα άρθρα της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
143258: How to Create Constants and DLL Declarations in a Type Library

122285: How To Add Type Libraries as Resources to .dll and .exe Files

142840: Απαιτήσεις της Visual Basic για λειτουργίες του εξαγόμενου αρχείου DLL

(c) Microsoft Corporation 1998, όλα τα δικαιώματα κάθε νόμιμου δικαιώματος. Contributions by Richard R. Taylor, Microsoft Corporation

Ιδιότητες

Αναγν. άρθρου: 189133 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • 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
Λέξεις-κλειδιά: 
kbhowto kbmt KB189133 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:189133

Αποστολή σχολίων

 

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