Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.
Το άρθρο αυτό αντιπροσωπεύει μια εισαγωγή στη δημιουργία Visual C++ υπολογιστές-πελάτες για τα στοιχεία της Visual Basic ActiveX. Εάν είστε ήδη proficient με Visual C++, ίσως θελήσετε να αναφερθείτε στην ενότητα αναφορών για μια λίστα θεμάτων πιο σύνθετες.
Βήματα για τη δημιουργία του διακομιστή της Visual Basic
Για να δημιουργήσετε ένα έργο της Visual Basic ActiveX DLL. Class1 δημιουργείται από προεπιλογή.
Προσθέστε τον ακόλουθο κώδικα Class1:
Public Function MyVBFunction(x As Integer) As Integer
MsgBox x
End Function
Μεταγλώττιση του αρχείου DLL ως c:\Project1.dll και να κλείσετε την Επεξεργασία Visual Basic.
Μέθοδος 1 - CreateDispatch:
Ξεκινήστε το Visual C++ και επιλέξτε Δημιουργία στο μενού αρχείο. Επιλέξτε AppWizard MFC (Exe) και ένα όνομα έργου και κάντε κλικ στο κουμπί OK. Όταν το MFC AppWizard εμφανίζεται το παράθυρο διαλόγου, επιλέξτε Τέλος. Κάντε κλικ στο κουμπί OK στο επόμενο παράθυρο διαλόγου.
Επιλέξτε ClassWizard στο μενού Προβολή, επιλέξτε Ctst1App στο πλαίσιο όνομα κλάσης και κάντε διπλό κλικ στο InitInstance στο πλαίσιο μηνυμάτων. Κάντε κλικ στο κουμπί Επεξεργασία κώδικα για να εμφανιστεί ο κωδικός για CTst1App::InitInstance() ΔΥΑΔΙΚΌΣ, βρείτε τη γραμμή AfxEnableControlContainer(); και προσθέστε την ακόλουθη γραμμή πριν από αυτή:
AfxOleInit();
Επιλέξτε ClassWizard από το μενού "Προβολή" και κάντε κλικ στην καρτέλα της αυτοματοποίησης. AddClass κάντε κλικ και επιλέξτε "από ένα TypeLibrary". Καθορισμός Project1.dll, το αρχείο DLL της Visual Basic που δημιουργήθηκε στο βήμα 3. Όταν εμφανιστεί το παράθυρο διαλόγου επιβεβαίωση κατηγορίες, κάντε κλικ στο κουμπί OK. Κάντε κλικ στο κουμπί OK για να κλείσετε το MFC ClassWizard παράθυρο διαλόγου.
Ανοίξτε το αρχείο .cpp <app name="">και προσθέστε τη γραμμή # include "Project1.h". Πρέπει να συμπεριλάβετε Project1.h, όπου και αν έχετε κωδικό που έχει πρόσβαση σε project1.dll. </app>
Ανοίξτε ξανά το ClassWizard. Στην καρτέλα πίνακες μηνυμάτων, επιλέξτε CAboutDlg στο πλαίσιο όνομα κλάσης και IDOK στο πλαίσιο αναγνωριστικό αντικειμένου και, στη συνέχεια, κάντε διπλό κλικ στο BN_CLICKED. Ως απόκριση στο παράθυρο διαλόγου και OK για να κλείσετε το ClassWizard, κάντε κλικ στο κουμπί OK.
Άνοιγμα <app name="">.cpp, μετακινηθείτε με κύλιση προς τα κάτω για να theCAboutDlg::OnOK() και αντικαταστήστε με τον ακόλουθο κώδικα:</app>
void CAboutDlg::OnOK()
{
short st = 2;
short st1;
_Class1 p;
p.CreateDispatch("Project1.Class1");
st1 = p.MyVBFunction(&st);
CDialog::OnOK();
}
Η μεταγλώττιση του αρχείου .exe (F7).
Εκτελέστε το αρχείο .exe και επιλέξτε πληροφορίες σχετικά με το μενού "Βοήθεια". Κάντε κλικ στο κουμπί OK στο πλαίσιο πληροφορίες και να εμφανιστεί το πλαίσιο μηνύματος που καθορίστηκε στην project1.dll. Κάντε κλικ στο κουμπί "Κλείσιμο" για να κλείσετε το παράθυρο διαλόγου.
Μέθοδος 2 - #IMPORT:
Ξεκινήστε το Visual C++ 6.0 και δημιουργήστε μια κονσόλα Win32 εφαρμογής. Επιλέξτε "Ένα κενό έργο" και κάντε κλικ στο κουμπί Τέλος.
Σημείο για προσθήκη στο 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();
}
Μεταγλώττιση και εκτέλεση του έργου σας. Πρέπει να εμφανιστεί το πλαίσιο μηνύματος από Project1.DLL.
Η μέθοδος #import μπορεί να χρησιμοποιηθεί σε μια εφαρμογή Win32, μιας εφαρμογής κονσόλας, ή MFC επίσης.
Μέθοδος 3 - αμιγώς διασύνδεσης COM
Ξεκινήστε το Visual C++ και επιλέξτε Δημιουργία από το μενού "αρχείο". Επιλέξτε AppWizard MFC (Exe), ονομάστε το tst1 έργο και κάντε κλικ στο κουμπί OK. Όταν το MFC Appwizard παράθυρο διαλόγου εμφανίζεται, επιλέξτε με το παράθυρο διαλόγου και κάντε κλικ στο κουμπί Τέλος. Όταν εμφανιστεί το επόμενο παράθυρο διαλόγου, κάντε κλικ στο κουμπί OK.
Το πρόγραμμα επεξεργασίας πόρων ενεργοποιείται από προεπιλογή. Διαγράψτε όλα τα στοιχεία ελέγχου στο παράθυρο διαλόγου και να προσθέσετε ένα κουμπί εντολής, διατηρώντας την προεπιλεγμένη λεζάντα "Button1".
Κάντε διπλό κλικ για να εμφανίσετε τη λειτουργία μέλος Προσθήκη Button1 παράθυρο διαλόγου. Κάντε κλικ στο κουμπί OK για να αποδεχθείτε το όνομα OnButton1.
Στο μενού Εργαλεία, κάντε κλικ στο πρόγραμμα προβολής για το αντικείμενο 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.
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.
Click New on Visual C++ File menu. Select Text File on the
New dialog box, name the file test1.idl, and click OK.
A blank text file appears. Paste the data from the
Clipboard into it and save the file.
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.
Open tst1Dlg.cpp and add the following files to the
includes section:
#include <initguid.h>
#include "test1.h"
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();
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();
}
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.
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:194873
(http://support.microsoft.com/kb/194873/en-us/
)
Πόση προσπάθεια καταβάλλατε για να χρησιμοποιήσετε αυτό το άρθρο;
Πολύ λίγη
Λίγη
Μέτρια
Μεγάλη
Πολύ μεγάλη
Πείτε μας για ποιον λόγο και με ποιον τρόπο θα μπορούσαμε να βελτιώσουμε αυτές τις πληροφορίες
Σας ευχαριστούμε! Τα σχόλιά σας θα μας βοηθήσουν να βελτιώσουμε το περιεχόμενο υποστήριξης. Για περισσότερες επιλογές βοήθειας, επισκεφτείτε την αρχική σελίδα της Βοήθειας και υποστήριξης.