Αναγν. άρθρου: 828736 - Τελευταία αναθεώρηση: Κυριακή, 29 Μαΐου 2011 - Αναθεώρηση: 4.0

Τρόπος κλήσης διαχειριζόμενου DLL από τον τοπικό κώδικα Visual C++, Visual Studio.NET ή Visual Studio 2005

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

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

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

Περίληψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο κλήσης μιας διαχειριζόμενης DLL από τον τοπικό κώδικα C++. Για να το κάνετε αυτό, να δημιουργήσετε μια απλή διαχείριση DLL χρησιμοποιώντας το Microsoft Visual C#.NET ή Microsoft Visual C# 2005, και στη συνέχεια καλέστε το διαχειριζόμενο DLL από τον τοπικό κώδικα C++.

Απαιτήσεις

Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τα ακόλουθα θέματα:
  • Εγγραφή μοντέλου αντικειμένου στοιχείου (COM), οι υπολογιστές-πελάτες
  • Διαλειτουργικότητα COM στη Microsoft.NET Framework

Η ακόλουθη λίστα περιγράφει το συνιστώμενο υλικό, λογισμικό, υποδομή δικτύου και service pack που χρειάζεστε:
  • Visual C#.NET ή Visual C# 2005
  • Visual C++.NET ή Visual C++ 2005

Γράψτε ένα διαχειριζόμενο αρχείο DLL

Για να δημιουργήσετε μια απλή διαχείριση DLL που έχει δημόσια μέθοδο Προσθέστε δύο αριθμούς και επιστρέφει το αποτέλεσμα, ακολουθήστε τα εξής βήματα:
  1. Ξεκινήστε το Microsoft Visual Studio.NET ή το Microsoft Visual Studio 2005.
  2. Από το Το αρχείο μενού, σημείο Νέα, και στη συνέχεια κάντε κλικ στο κουμπί Έργο. Το Νέα Έργο Ανοίγει το παράθυρο διαλόγου.
  3. Στην περιοχή Τύποι έργου, κάντε κλικ στο κουμπί Οπτική Έργων C#.

    Σημείωση Στο Visual Studio 2005, κάντε κλικ στο κουμπί Visual C# στην περιοχή Τύποι έργου.
  4. Στην περιοχή Πρότυπα, κάντε κλικ στο κουμπί Κλάση Βιβλιοθήκη.
  5. Με το Όνομα πλαίσιο κειμένου, πληκτρολογήστε sManagedDLL, και στη συνέχεια κάντε κλικ στο κουμπί OK.
  6. Ανοίξτε το αρχείο Class1.cs στην προβολή Code.
  7. Για να δηλώσετε μια δημόσια διασύνδεση που έχει μια μέθοδο για να προσθέσετε δύο αριθμοί, προσθέστε τον ακόλουθο κώδικα στο αρχείο Class1.cs:
    // Interface declaration.
    public interface ICalculator
    {
        int Add(int Number1, int Number2);
    };
  8. Για να υλοποιήσετε αυτήν τη δημόσια διασύνδεση σε μια κλάση, προσθέστε το παρακάτω κώδικα στο αρχείο Class1.cs:
    // Interface implementation.
    public class ManagedClass:ICalculator
    {
        public int Add(int Number1,int Number2)
            {
                return Number1+Number2;
            }
    }
  9. Κάντε κλικ στο κουμπί Έναρξη, και στη συνέχεια στο Προγράμματα.
  10. Εάν χρησιμοποιείτε το Microsoft Visual Studio.NET 2003, σημείο Για να Microsoft Visual Studio.NET 2003, και στη συνέχεια στο Visual Studio.Εργαλεία ΔΙΚΤΎΟΥ. Εάν χρησιμοποιείτε Microsoft Visual Στούντιο.NET 2002, σημείο Microsoft Visual Studio.NET, και στη συνέχεια Visual Studio.Εργαλεία ΔΙΚΤΎΟΥ. Εάν χρησιμοποιείτε το Visual Studio 2005, σημείο Microsoft Visual Studio 2005, και στη συνέχεια Visual Studio 2005 Tools.
  11. Εάν χρησιμοποιείτε το Visual Studio.NET 2003, κάντε κλικ στο Visual Studio.Γραμμή εντολών NET 2003 Για να ανοίξετε το Visual Studio .NET εντολών. Εάν χρησιμοποιείτε το Visual Studio.NET 2002, κάντε κλικ στο Visual Studio.NET εντολών Για να ανοίξετε το Visual Studio.NET γραμμή εντολών. Εάν χρησιμοποιείτε το Visual Studio 2005, κάντε κλικ στο κουμπί Visual Studio 2005 μια γραμμή εντολών Για να ανοίξετε το Visual Studio 2005 γραμμή εντολών.
  12. Για να δημιουργήσετε ένα ισχυρό όνομα για τη βιβλιοθήκη σας κλάσης, πληκτρολογήστε το παρακάτω εντολή στο Visual Studio.ΚΑΘΑΡΉ γραμμή εντολών:
    MyKeyFile.SNK SN.exe -k
  13. Αντιγράψτε το αρχείο MyKeyFile.SNK στο έργο σας ο φάκελος.
  14. Κάντε διπλό κλικ το AssemblyInfo.cs αρχείο Ανοίξτε το αρχείο στην Εξερεύνηση λύση.
  15. Αντικαταστήστε τις παρακάτω γραμμές κώδικα με το AssemblyInfo.cs το αρχείο
    [assembly: ComVisible(false)]
    [assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("")]
    με τα ακόλουθα.
    [assembly: ComVisible(true)] 
    [assembly: AssemblyDelaySign(false)] 
    [assembly: AssemblyKeyFile("..\\..\\MyKeyFile.SNK")]
  16. Πιέστε το συνδυασμό πλήκτρων CTRL + SHIFT + B για τη δημιουργία διαχειριζόμενων DLL.

Καταχώρηση διαχειριζόμενο DLL για χρήση με COM ή C++ εγγενή

Για να χρησιμοποιήσετε το διαχειριζόμενο DLL με COM ή με την εγγενή C++, πρέπει να καταχωρήσετε πληροφορίες συγκρότησης από το αρχείο DLL στο του Το μητρώο των Windows. Ακολουθήστε τα εξής βήματα:
  1. Κάντε κλικ στο κουμπί Έναρξη, και στη συνέχεια στο Προγράμματα.
  2. Εάν χρησιμοποιείτε το Microsoft Visual Studio.NET 2003, σημείο Για να Microsoft Visual Studio.NET 2003, και στη συνέχεια στο Visual Studio.Εργαλεία ΔΙΚΤΎΟΥ. Εάν χρησιμοποιείτε Microsoft Visual Στούντιο.NET 2002, σημείο Microsoft Visual Studio.NET, και στη συνέχεια Visual Studio.Εργαλεία ΔΙΚΤΎΟΥ. Εάν χρησιμοποιείτε το Visual Studio 2005, σημείο Microsoft Visual Studio 2005, και στη συνέχεια Visual Studio 2005 Tools
  3. Εάν χρησιμοποιείτε το Visual Studio.NET 2003, κάντε κλικ στο Visual Studio.Γραμμή εντολών NET 2003 Για να ανοίξετε το Visual Studio .NET εντολών. Εάν χρησιμοποιείτε το Visual Studio.NET 2002, κάντε κλικ στο Visual Studio.NET εντολών Για να ανοίξετε το Visual Studio.NET γραμμή εντολών. Εάν χρησιμοποιείτε το Visual Studio 2005, κάντε κλικ στο κουμπί Visual Studio 2005 μια γραμμή εντολών Για να ανοίξετε το Visual Studio 2005 γραμμή εντολών.
  4. Στο Visual Studio.NET ή Visual Studio 2005 εντολών, αλλαγή του διαδρομή καταλόγου του καταλόγου που περιέχει διαχειριζόμενο αρχείο DLL σας.
  5. Για να καταχωρήσετε πληροφορίες συγκρότησης από το διαχειριζόμενο DLL στο το μητρώο των Windows και να δημιουργήσετε μια αντίστοιχη βιβλιοθήκη τύπων, εκτελέστε το παρακάτω εντολή στο Visual Studio.ΚΑΘΑΡΉ γραμμή εντολών:
    /Tlb:ManagedDLL.tlb RegAsm.exe ManagedDLL.dll / codebase

Καλέστε το διαχειριζόμενο DLL από τον τοπικό κώδικα C++

Για να καλέσετε το διαχειριζόμενο DLL που μόλις δημιουργήσατε από C++ εγγενή κώδικα, ακολουθήστε τα εξής βήματα:
  1. Ξεκινήστε το Visual Studio.NET ή Visual Studio 2005.
  2. Από το Το αρχείο μενού, σημείο Νέα, και στη συνέχεια κάντε κλικ στο κουμπί Έργο.
  3. Εάν χρησιμοποιείτε το Visual C++.NET 2003, κάντε κλικ στο Οπτική Έργα C++ στην περιοχή Τύποι έργου, και στη συνέχεια κάντε κλικ στο κουμπί Το Project κονσόλας Win32 στην περιοχή Πρότυπα. Εάν έχετε χρησιμοποιείτε Visual C++.NET 2002, κάντε κλικ στο Έργα του Visual C++στην περιοχή Τύποι έργου, και στη συνέχεια κάντε κλικ στο κουμπί Win32 Έργο στην περιοχή Πρότυπα. Εάν έχετε Οι χρησιμοποιώντας το Visual C++ 2005, κάντε κλικ στο κουμπί Visual C++στην περιοχή Τύποι έργου, και στη συνέχεια κάντε κλικ στο κουμπί Win32 Έργο στην περιοχή Πρότυπα
  4. Με το Όνομα πλαίσιο κειμένου, πληκτρολογήστε CPPClient, και στη συνέχεια κάντε κλικ στο κουμπί OK.
  5. Εάν χρησιμοποιείτε το Visual C++.NET 2003 ή Visual C++ 2005, κάντε κλικ στο κουμπί Τέλος. Εάν χρησιμοποιείτε το Visual C++.NET 2002, κάντε κλικ στο Ρυθμίσεις εφαρμογής, κάντε κλικ στο κουμπί Κονσόλα Εφαρμογή, και στη συνέχεια κάντε κλικ στο κουμπί Τέλος.
  6. Ανοίξτε το αρχείο CPPClient.cpp στην προβολή Code.
  7. Εισαγωγή βιβλιοθήκης τύπων που δημιουργεί RegAsm.exe, προσθήκη τον παρακάτω κώδικα στο αρχείο CPPClient.cpp:
    // Import the type library.
    #import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
    Εάν η διαδρομή στον υπολογιστή σας διαφέρει από αυτό, αλλάξτε τη διαδρομή της βιβλιοθήκης τύπων διαδρομή.
  8. Για να δηλώσετε το χώρο ονομάτων, χρήση, προσθέστε τον παρακάτω κώδικα στο το αρχείο CPPClient.cpp:
    using namespace ManagedDLL;
  9. Για να καλέσετε το διαχειριζόμενο DLL, προσθέστε τον ακόλουθο κώδικα για το _tmain συνάρτηση:
    // Initialize COM.
    HRESULT hr = CoInitialize(NULL);
    
    // Create the interface pointer.
    ICalculatorPtr pICalc(__uuidof(ManagedClass));
    
    long lResult = 0;
    
    // Call the Add method.
    pICalc->Add(5, 10, &lResult);
    
    wprintf(L"The result is %d", lResult);
    
    // Uninitialize COM.
    CoUninitialize();
    return 0;
  10. Πιέστε το συνδυασμό πλήκτρων CTRL + F5 για να εκτελέσετε την εφαρμογή.

Ολοκλήρωση κώδικα Καταχώρηση

Διαχειριζόμενο DLL
// Class1.cs
// A simple managed DLL that contains a method to add two numbers.
using System;

namespace ManagedDLL
{
	// Interface declaration.
    public interface ICalculator
    {
        int Add(int Number1, int Number2);
    };

    // Interface implementation.
	public class ManagedClass:ICalculator
	{
       public int Add(int Number1,int Number2)
            {
                return Number1+Number2;
            }
	}
}
Πρόγραμμα-πελάτης C++
// CPPClient.cpp: Defines the entry point for the console application.
// C++ client that calls a managed DLL.

#include "stdafx.h"
#include "tchar.h"
// Import the type library.

#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
using namespace ManagedDLL;
int _tmain(int argc, _TCHAR* argv[])
{
    // Initialize COM.
    HRESULT hr = CoInitialize(NULL);

    // Create the interface pointer.
    ICalculatorPtr pICalc(__uuidof(ManagedClass));

    long lResult = 0;

    // Call the Add method.
    pICalc->Add(5, 10, &lResult);

    wprintf(L"The result is %d\n", lResult);


    // Uninitialize COM.
    CoUninitialize();
    return 0;
}
Σημείωση Πρέπει να προσθέσετε το κοινό (επιλογή μεταγλωττιστή υποστήριξης χρόνου εκτέλεσης γλώσσας/CLR:oldSyntax) στο Visual C++ 2005 να μεταγλωττιστεί με επιτυχία αυτό το δείγμα κώδικα. Ακολουθήστε τα εξής βήματα:
  1. Κάντε κλικ στο κουμπί Έργο, και στη συνέχεια κάντε κλικ στο κουμπί Όνομα_έργου Ιδιότητες.

    Σημείωση Όνομα_έργου αντιπροσωπεύει το όνομα του έργου.
  2. Αναπτύξτε το στοιχείο Ιδιότητες παραμέτρων, και στη συνέχεια κάντε κλικ στο κουμπί Γενικά.
  3. Κάντε κλικ στην επιλογή Υποστήριξη χρόνου εκτέλεσης κοινής γλώσσας, παλιά σύνταξη (/ clr:oldSyntax) με το Υποστήριξη κοινή γλώσσα χρόνου εκτέλεσης ρύθμιση στο δεξιό τμήμα του παραθύρου του έργου, κάντε κλικ στο Εφαρμογή, και στη συνέχεια κάντε κλικ στο κουμπί OK.
Για περισσότερες πληροφορίες σχετικά με το χρόνο εκτέλεσης κοινής γλώσσας μεταγλωττιστή επιλογές υποστήριξης, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:
/CLR (μεταγλώττισης χρόνου εκτέλεσης κοινής γλώσσας)
http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)

Αναφορές

Για περισσότερες πληροφορίες σχετικά με την έκθεση.NET Framework στοιχεία COM, επισκεφθείτε την ακόλουθη Web Microsoft Developer Network (MSDN) τοποθεσία:
.aspx http://msdn2.Microsoft.com/en-us/library/zsfww439 (vs.71) (http://msdn2.microsoft.com/en-us/library/zsfww439(vs.71).aspx)

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Λέξεις-κλειδιά: 
kbmanaged kbcominterop kbhowtomaster kbmt KB828736 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:828736  (http://support.microsoft.com/kb/828736/en-us/ )