Wie Sie eine verwaltete DLL von systemeigenen Visual C++-Code in Visual Studio.NET oder Visual Studio 2005 aufrufen.

Zusammenfassung

Dieser schrittweise aufgebaute Artikel beschreibt, wie eine verwaltete DLL von systemeigenem C++-Code aufrufen. Hierzu erstellen Sie eine einfache verwaltete DLL mithilfe von Microsoft Visual C# .NET oder Microsoft Visual C# 2005 und rufen Sie diese verwaltete DLL von systemeigenem C++-Code.

zurück zum Anfang

Voraussetzungen

Es wird vorausgesetzt, dass Sie mit folgenden Themen vertraut sind:
  • Schreiben von Component Object Model (COM)-clients
  • COM-Interoperabilität in Microsoft.NET Framework

Die folgende Liste enthält die empfohlene Hardware, Software, Netzwerkinfrastruktur und Servicepacks, die Sie benötigen:
  • Visual C# .NET oder Visual C# 2005
  • Visual c++.NET oder Visual C++ 2005
zurück zum Anfang

Eine verwaltete DLL schreiben

Gehen Sie folgendermaßen vor, um eine einfache verwaltete DLL mit einer öffentlichen Methode zu erstellen, die zwei Zahlen addiert und das Ergebnis zurückgibt:
  1. Starten Sie Microsoft Visual Studio .NET oder Microsoft Visual Studio 2005.
  2. Zeigen Sie im Menü Datei auf
    Neu, und klicken Sie dann auf Projekt. Das Dialogfeld Neues Projekt wird geöffnet.
  3. Klicken Sie unter Projekttypenauf Visual C#-Projekte.

    Hinweis Klicken Sie in Visual Studio 2005 auf Visual C# unter Projekttypen.
  4. Klicken Sie unter Vorlagenauf Klassenbibliothek.
  5. Geben Sie im Textfeld Name
    sManagedDLLund klicken Sie dann auf
    OK.
  6. Öffnen Sie die Datei Class1.cs in der Codeansicht.
  7. Um eine öffentliche Schnittstelle deklarieren, die eine Methode zwei Zahlen, der Datei Class1.cs fügen Sie folgenden Code hinzu:
    // Interface declaration.public interface ICalculator
    {
    int Add(int Number1, int Number2);
    };
  8. Um diese öffentliche Schnittstelle in einer Klasse implementieren, die Datei Class1.cs fügen Sie folgenden Code hinzu:
    // Interface implementation.public class ManagedClass:ICalculator
    {
    public int Add(int Number1,int Number2)
    {
    return Number1+Number2;
    }
    }
  9. Klicken Sie auf Start, und zeigen Sie dann auf
    Programme.
  10. Wenn Sie Microsoft Visual Studio .NET 2003 verwenden, zeigen Sie auf Microsoft Visual Studio .NET 2003und zeigen Sie dann auf
    Visual Studio .NET Tools. Bei Verwendung von Microsoft Visual Studio .NET 2002 auf Microsoft Visual Studio .NETund Visual Studio .NETTools zeigen. Wenn Sie Visual Studio 2005 verwenden, zeigen Sie auf Microsoft Visual Studio 2005und zeigen Sie in Visual Studio 2005-Tools.
  11. Wenn Sie Visual Studio .NET 2003 verwenden, klicken Sie auf
    Visual Studio .NET 2003-Command Prompt eine Befehlszeile von Visual Studio .NET geöffnet. Wenn Sie Visual Studio .NET 2002 verwenden, klicken Sie auf
    Befehlszeile von Visual Studio .NET eine Befehlszeile von Visual Studio .NET geöffnet. Wenn Sie Visual Studio 2005 verwenden, klicken Sie auf
    Visual Studio 2005 Command Prompt ein Visual Studio 2005-Eingabeaufforderungsfenster geöffnet.
  12. Um einen starken Namen für die Klassenbibliothek zu erstellen, geben Sie folgenden Befehl in die Befehlszeile von Visual Studio .NET:
    Sn.exe -k MyKeyFile.SNK
  13. Kopieren Sie die MyKeyFile.SNK-Datei in den Projektordner.
  14. Doppelklicken Sie auf die Datei AssemblyInfo.cs , um die Datei im Projektmappen-Explorer öffnen.
  15. Ersetzen Sie die folgenden Codezeilen in der Datei AssemblyInfo.cs
    [assembly: ComVisible(false)][assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("")]
    mit den folgenden.
    [assembly: ComVisible(true)] [assembly: AssemblyDelaySign(false)] 
    [assembly: AssemblyKeyFile("..\\..\\MyKeyFile.SNK")]
  16. Drücken Sie STRG + UMSCHALT + B um die verwaltete DLL zu generieren.
zurück zum Anfang

Registrieren der DLL des verwalteten COM oder mit systemeigenem C++

Um der DLL des verwalteten COM- oder systemeigenes C++ verwenden, müssen Sie die Assemblyinformationen der DLL in der Registrierung registrieren. Gehen Sie hierzu folgendermaßen vor:
  1. Klicken Sie auf Start, und zeigen Sie dann auf
    Programme.
  2. Wenn Sie Microsoft Visual Studio .NET 2003 verwenden, zeigen Sie auf Microsoft Visual Studio .NET 2003und zeigen Sie dann auf
    Visual Studio .NET Tools. Bei Verwendung von Microsoft Visual Studio .NET 2002 auf Microsoft Visual Studio .NETund Visual Studio .NETTools zeigen. Wenn Sie Visual Studio 2005 verwenden, zeigen Sie auf Microsoft Visual Studio 2005und zeigen Sie dann auf Visual Studio 2005-Tools
  3. Wenn Sie Visual Studio .NET 2003 verwenden, klicken Sie auf
    Visual Studio .NET 2003-Command Prompt eine Befehlszeile von Visual Studio .NET geöffnet. Wenn Sie Visual Studio .NET 2002 verwenden, klicken Sie auf
    Befehlszeile von Visual Studio .NET eine Befehlszeile von Visual Studio .NET geöffnet. Wenn Sie Visual Studio 2005 verwenden, klicken Sie auf
    Visual Studio 2005 Command Prompt ein Visual Studio 2005-Eingabeaufforderungsfenster geöffnet.
  4. Ändern Sie in der Befehlszeile von Visual Studio .NET oder Visual Studio 2005 den Verzeichnispfad des Verzeichnisses, das die verwaltete DLL enthält.
  5. Assemblyinformationen der verwalteten DLL in der Registrierung registriert und eine entsprechenden Typbibliothek erstellen, führen Sie folgenden Befehl in die Befehlszeile von Visual Studio .NET:
    RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb /codebase
zurück zum Anfang

Aufrufen der Managed DLL durch nativen C++ Code

Um die Managed-DLL aufzurufen, die Sie gerade in nativem C++ Code erstellt haben, gehen Sie folgendermaßen vor:
  1. Starten Sie Visual Studio .NET oder Visual Studio 2005.
  2. Zeigen Sie im Menü Datei auf
    Neu, und klicken Sie dann auf Projekt.
  3. Bei Verwendung von Visual C++ .NET 2003 klicken Sie unter Projekttypenauf Visual C++-Projekte , und klicken Sie dann auf
    Win32-Konsolenprojekt Vorlagen. Bei Verwendung von Visual C++ .NET 2002 klicken Sie unter Projekttypenauf Visual C++-Projekte , und klicken Sie unter Vorlagenauf Win32-Projekt . Wenn Sie Visual C++ 2005 verwenden, klicken Sie unter Projekttypenauf Visual C++ , und klicken Sie unter Vorlagen auf Win32-Projekt
  4. Geben Sie im Textfeld Name
    CPPClientund klicken Sie dann auf
    OK.
  5. Wenn Sie Visual C++ .NET 2003 oder Visual C++ 2005 verwenden, klicken Sie auf
    Fertig stellen. Klicken Sie bei Verwendung von Visual C++ .NET 2002
    Application Settings Konsolenanwendungsprojektauf und klicken Sie dann auf Fertig stellen.
  6. Öffnen Sie die Datei CPPClient.cpp in der Codeansicht.
  7. CPPClient.cpp Datei zum Importieren der Typbibliothek, die RegAsm.exe generiert fügen Sie den folgenden Code hinzu:
    // Import the type library.#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
    Ändern Sie den Pfad der Typbibliothek, wenn dieser Pfad der Pfad auf Ihrem Computer unterscheidet.
  8. Die Datei CPPClient.cpp zum Deklarieren der Namespaces verwenden fügen Sie den folgenden Code hinzu:
    using namespace ManagedDLL;
  9. Fügen Sie den folgenden Code, rufen Sie die verwaltete DLL die
    Funktion _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. Drücken Sie STRG + F5, um die Anwendung auszuführen.
zurück zum Anfang

Vollständige Codeliste

Verwaltete 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++-Client
// 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;
}

Hinweis Fügen Sie in Visual C++ 2005 um dieses Codebeispiel Kompilieren der Compileroption "common Language Runtime Unterstützung" (oldsyntax/clr: oldSyntax). Gehen Sie hierzu folgendermaßen vor:

  1. Klicken Sie auf Projekt, und klicken Sie dann auf Eigenschaften von Projektname .

    Hinweis Projektname stellt den Namen des Projekts.
  2. Erweitern Sie Konfigurationseigenschaftenund dann auf Allgemein.

  3. Klicken Sie auf Common Language Runtime-Unterstützung, alte Syntax (/ CLR: oldSyntax) in der Common Language Runtime unterstützen Projekt im rechten Bereich klicken Sie auf Übernehmenund dann auf OK.

Weitere Informationen über die common Language Runtime unterstützen Sie Compileroptionen, finden Sie auf der folgenden Microsoft-Website:
/ CLR (common Language Runtime Compilation)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
zurück zum Anfang

Referenzen

Weitere Informationen zum Bereitstellen von.NET Framework-Komponenten in COM finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:zurück zum Anfang
Eigenschaften

Artikelnummer: 828736 – Letzte Überarbeitung: 16.01.2017 – Revision: 1

Feedback