Αναγν. άρθρου: 194873 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0

Τρόπος πρόσβασης σε μια βιβλιοθήκη DLL ActiveX της Visual Basic από μια εκτελέσιμη Visual C++ 6.0

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

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

Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο περιγράφει τρεις τρόπους για να αποκτήσετε πρόσβαση σε μια βιβλιοθήκη DLL ActiveX της Visual Basic από μια Visual C++ 6.0 εκτελέσιμο.

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

Το άρθρο αυτό αντιπροσωπεύει μια εισαγωγή στη δημιουργία Visual C++ υπολογιστές-πελάτες για τα στοιχεία της Visual Basic ActiveX. Εάν είστε ήδη proficient με Visual C++, ίσως θελήσετε να αναφερθείτε στην ενότητα αναφορών για μια λίστα θεμάτων πιο σύνθετες.

Βήματα για τη δημιουργία του διακομιστή της Visual Basic



  1. Για να δημιουργήσετε ένα έργο της Visual Basic ActiveX DLL. Class1 δημιουργείται από προεπιλογή.
  2. Προσθέστε τον ακόλουθο κώδικα Class1:
          Public Function MyVBFunction(x As Integer) As Integer
             MsgBox x
          End Function
    						
  3. Μεταγλώττιση του αρχείου DLL ως c:\Project1.dll και να κλείσετε την Επεξεργασία Visual Basic.
Μέθοδος 1 - CreateDispatch:

  1. Ξεκινήστε το Visual C++ και επιλέξτε Δημιουργία στο μενού αρχείο. Επιλέξτε AppWizard MFC (Exe) και ένα όνομα έργου και κάντε κλικ στο κουμπί OK. Όταν το MFC AppWizard εμφανίζεται το παράθυρο διαλόγου, επιλέξτε Τέλος. Κάντε κλικ στο κουμπί OK στο επόμενο παράθυρο διαλόγου.
  2. Επιλέξτε ClassWizard στο μενού Προβολή, επιλέξτε Ctst1App στο πλαίσιο όνομα κλάσης και κάντε διπλό κλικ στο InitInstance στο πλαίσιο μηνυμάτων. Κάντε κλικ στο κουμπί Επεξεργασία κώδικα για να εμφανιστεί ο κωδικός για CTst1App::InitInstance() ΔΥΑΔΙΚΌΣ, βρείτε τη γραμμή AfxEnableControlContainer(); και προσθέστε την ακόλουθη γραμμή πριν από αυτή:
          AfxOleInit();
  3. Επιλέξτε ClassWizard από το μενού "Προβολή" και κάντε κλικ στην καρτέλα της αυτοματοποίησης. AddClass κάντε κλικ και επιλέξτε "από ένα TypeLibrary". Καθορισμός Project1.dll, το αρχείο DLL της Visual Basic που δημιουργήθηκε στο βήμα 3. Όταν εμφανιστεί το παράθυρο διαλόγου επιβεβαίωση κατηγορίες, κάντε κλικ στο κουμπί OK. Κάντε κλικ στο κουμπί OK για να κλείσετε το MFC ClassWizard παράθυρο διαλόγου.
  4. Ανοίξτε το αρχείο .cpp <app name="">και προσθέστε τη γραμμή # include "Project1.h". Πρέπει να συμπεριλάβετε Project1.h, όπου και αν έχετε κωδικό που έχει πρόσβαση σε project1.dll. </app>
  5. Ανοίξτε ξανά το ClassWizard. Στην καρτέλα πίνακες μηνυμάτων, επιλέξτε CAboutDlg στο πλαίσιο όνομα κλάσης και IDOK στο πλαίσιο αναγνωριστικό αντικειμένου και, στη συνέχεια, κάντε διπλό κλικ στο BN_CLICKED. Ως απόκριση στο παράθυρο διαλόγου και OK για να κλείσετε το ClassWizard, κάντε κλικ στο κουμπί OK.
  6. Άνοιγμα <app name="">.cpp, μετακινηθείτε με κύλιση προς τα κάτω για να theCAboutDlg::OnOK() και αντικαταστήστε με τον ακόλουθο κώδικα:</app>
          void CAboutDlg::OnOK()
          {
    
          short st = 2;
          short st1;
          _Class1 p;
          p.CreateDispatch("Project1.Class1");
          st1 = p.MyVBFunction(&amp;st);
          CDialog::OnOK();
          }
    						
  7. Η μεταγλώττιση του αρχείου .exe (F7).
  8. Εκτελέστε το αρχείο .exe και επιλέξτε πληροφορίες σχετικά με το μενού "Βοήθεια". Κάντε κλικ στο κουμπί OK στο πλαίσιο πληροφορίες και να εμφανιστεί το πλαίσιο μηνύματος που καθορίστηκε στην project1.dll. Κάντε κλικ στο κουμπί "Κλείσιμο" για να κλείσετε το παράθυρο διαλόγου.
Μέθοδος 2 - #IMPORT:

  1. Ξεκινήστε το Visual C++ 6.0 και δημιουργήστε μια κονσόλα Win32 εφαρμογής. Επιλέξτε "Ένα κενό έργο" και κάντε κλικ στο κουμπί Τέλος.
  2. Σημείο για προσθήκη στο Project, στο μενού ' έργο ' και νέα κάντε κλικ για να προσθέσετε ένα νέο αρχείο προέλευσης δεδομένων C++ στο έργο. Επικολλήστε τον ακόλουθο κώδικα στο νέο αρχείο προέλευσης και το αποθηκεύσετε:
          #include <stdio.h>
    
          // This is the path for your DLL.
          // Make sure that you specify the exact path.
    
          #import "c:\project1.dll"  no_namespace
    
          void main()
          {
           BSTR bstrDesc;
    
          try
          {
          CoInitialize(NULL);
          short st = 2;
           short st1;
          // Declare the Interface Pointer for your Visual Basic object. Here,
          // _Class1Ptr is the Smart pointer wrapper class representing the
          // default interface of the Visual Basic object.
    
          _Class1Ptr ptr;
          // Create an instance of your Visual Basic object, here
          // __uuidof(Class1) gets the CLSID of your Visual Basic object.
    
           ptr.CreateInstance(__uuidof(Class1));
           st1 = ptr->MyVBFunction(&st);
          }
          catch(_com_error &e)
          {
           bstrDesc = e.Description();
    
          }
          CoUninitialize();
          }
    						
  3. Μεταγλώττιση και εκτέλεση του έργου σας. Πρέπει να εμφανιστεί το πλαίσιο μηνύματος από Project1.DLL.
Η μέθοδος #import μπορεί να χρησιμοποιηθεί σε μια εφαρμογή Win32, μιας εφαρμογής κονσόλας, ή MFC επίσης.

Μέθοδος 3 - αμιγώς διασύνδεσης COM

  1. Ξεκινήστε το Visual C++ και επιλέξτε Δημιουργία από το μενού "αρχείο". Επιλέξτε AppWizard MFC (Exe), ονομάστε το tst1 έργο και κάντε κλικ στο κουμπί OK. Όταν το MFC Appwizard παράθυρο διαλόγου εμφανίζεται, επιλέξτε με το παράθυρο διαλόγου και κάντε κλικ στο κουμπί Τέλος. Όταν εμφανιστεί το επόμενο παράθυρο διαλόγου, κάντε κλικ στο κουμπί OK.
  2. Το πρόγραμμα επεξεργασίας πόρων ενεργοποιείται από προεπιλογή. Διαγράψτε όλα τα στοιχεία ελέγχου στο παράθυρο διαλόγου και να προσθέσετε ένα κουμπί εντολής, διατηρώντας την προεπιλεγμένη λεζάντα "Button1".
  3. Κάντε διπλό κλικ για να εμφανίσετε τη λειτουργία μέλος Προσθήκη Button1 παράθυρο διαλόγου. Κάντε κλικ στο κουμπί OK για να αποδεχθείτε το όνομα OnButton1.
  4. Στο μενού Εργαλεία, κάντε κλικ στο πρόγραμμα προβολής για το αντικείμενο OLE/COM. Select View Typelib from the File menu and choose the Project1.dll you created earlier. Click Open to display the ITypeLib Viewer, which contains the .idl file for your DLL.
  5. Copy the contents of your .idl file (contents of the right pane) to the Clipboard. Hold the SHIFT key down while paging or scrolling from the first character to the end of the text in the pane. Press Ctrl+C to copy the marked text to the Clipboard.
  6. Click New on Visual C++ File menu. Select Text File on the New dialog box, name the file test1.idl, and click OK.
  7. A blank text file appears. Paste the data from the Clipboard into it and save the file.
  8. Select Settings from the Project menu, expand the tst1 and Source Files nodes of the tree view, and select test1.idl. Click the MIDL tab, enter test1.h in the "Output header file name" box, and click OK.
  9. Open tst1Dlg.cpp and add the following files to the includes section:
          #include <initguid.h>
          #include "test1.h"
    						
  10. Click the ClassWizard on the View menu, select Ctst1App in the Class Name box, and double-click InitInstance in the Messages box. Click Edit Code to bring up the code for:
          BOOL CTst1App::InitInstance()
    						
    Find the line:
          AfxEnableControlContainer();
    						
    Add the following line before it:
          AfxOleInit();
    						
  11. Open the ClassWizard again. On the Message Maps tab select CTst1Dlg in the Class Name box and IDC_BUTTON1 in the Object IDs box. Double-click BN_CLICKED in the Messages box, and click Edit Code to bring up the code for void CTst1Dlg::OnButton1(). Replace the OnButton1() function with the following code:
          void CTst1Dlg::OnButton1()
          {
             // TODO: Add your control notification handler code here.
    
             _Class1 *pClass = NULL;
             IUnknown *pUnk = NULL;
    
          //   HRESULT hr = CoCreateInstance(CLSID_Class1,NULL,
          //   CLSCTX_INPROC_SERVER,IID__Class1,(void **)&pClass);
          //   You can directly get the Interface ID as in the previous line or
          //   you can do a QueryInterface on IUnknown to get the IID
          //   as in the following three lines:
    
          HRESULT hr = CoCreateInstance(CLSID_Class1,NULL,CLSCTX_INPROC_SERVER,
          IID_IUnknown,(void **)&pUnk);
          hr = pUnk->QueryInterface(IID__Class1,(void **)&pClass);
          pUnk->Release();
    
          // Once you have the IID, you can make use of the interface pointer
          // to access our Visual Basic DLL.
    
          short st = 2;
          short st1;
          hr = pClass->MyVBFunction(&st,&st1);
          pClass->Release();
    
          }
    						
  12. Compile your .exe file (F7) and run your application (F5). Click Button1 in the dialog box. The message box from the Visual Basic DLL appears.

Αναφορές

For additional information, please see the following articles in the Microsoft Knowledge Base:
178749  (http://support.microsoft.com/kb/178749/EN-US/ ) How To Create an Automation Project Using MFC and a Type Library

188817  (http://support.microsoft.com/kb/188817/EN-US/ ) How To VC++ MFC Client for the ComCallingJava Sample

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Λέξεις-κλειδιά: 
kbinfo kbcode kbhowto kbmt KB194873 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:194873  (http://support.microsoft.com/kb/194873/en-us/ )