本文將逐步告訴您,如何從原生 C + + 程式碼呼叫受管理的 DLL。執行這項操作,使用 Microsoft Visual C#.NET 或 Microsoft Visual C# 2005,建立簡單的 Managed 的 DLL 並然後從原生 C + + 程式碼中呼叫此受管理的 DLL。
需求
本文假設您已熟悉下列主題:
- 撰寫元件物件模型 (COM) 用戶端
- Microsoft.NET Framework 中的 COM 互通性
下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
- Visual C#.NET 或 Visual C# 2005
- Visual C++.NET 或 Visual C++ 2005
撰寫 Managed 的 DLL
若要建立簡單的 Managed 的 DLL 具有公用方法以新增兩個數字並傳回結果,請依照下列步驟執行:
- 啟動 Microsoft Visual Studio.NET 或 Microsoft Visual Studio 2005。
- 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。[新增專案] 對話方塊隨即開啟。
- 在 [專案類型 下, 按一下 [Visual C# 專案]。
附註在 Visual 的 Studio 2005 按一下 Visual C#專案類型] 下。 - 在 [範本 下, 按一下 類別程式庫。
- 在 [名稱] 文字方塊中輸入 sManagedDLL,],然後再按一下 [確定]]。
- 在程式碼] 檢視中開啟 Class1.cs 檔案。
- 若要宣告有方法來加入兩個數字的公用介面,加入下列程式碼到 Class1.cs file:
// Interface declaration.
public interface ICalculator
{
int Add(int Number1, int Number2);
}; - 若要在類別中實作這個公用介面,將下列程式碼加入至 Class1.cs file:
// Interface implementation.
public class ManagedClass:ICalculator
{
public int Add(int Number1,int Number2)
{
return Number1+Number2;
}
} - 按一下 [開始],然後再指向 [程式集。
- 如果您使用的 Microsoft Visual Studio.NET 2003年,指向 Microsoft Visual Studio.NET 2003年,然後再指向 [Visual Studio.NET 工具。如果您使用的 Microsoft Visual Studio.NET 2002年,指向 Microsoft Visual Studio.NET,然後指向 [Visual Studio.NET 工具。如果您使用的 Visual Studio 2005,指向 Microsoft Visual Studio 2005,然後再指向 [Visual Studio 2005 工具。
- 如果您使用的 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 命令提示字元]。
- 若要建立您的類別庫的強式名稱,在 Visual Studio.NET 命令提示字元中輸入下列命令:
sn.exe k MyKeyFile.SNK
- 將 MyKeyFile.SNK 檔案複製到您的專案資料夾。
- 按兩下 AssemblyInfo.cs 檔案以在方案總管] 中開啟該檔案。
- 取代下列程式碼中 [AssemblyInfo.cs 檔案
[assembly: ComVisible(false)]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")] 與下列 [assembly: ComVisible(true)]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\MyKeyFile.SNK")] - 按下 CTRL + SHIFT + B 可產生 Managed 的 DLL。
註冊使用 Managed 的 DLL 與 COM 或原生 C + +
若要使用 COM 或原生 C + + 中,請使用 Managed 的 DLL,您必須 Windows 登錄中註冊您的 DLL 的組件資訊。要這麼做,請您執行下列步驟:
- 按一下 [開始],然後再指向 [程式集。
- 如果您使用的 Microsoft Visual Studio.NET 2003年,指向 Microsoft Visual Studio.NET 2003年,然後再指向 [Visual Studio.NET 工具。如果您使用的 Microsoft Visual Studio.NET 2002年,指向 Microsoft Visual Studio.NET,然後指向 [Visual Studio.NET 工具。 如果您使用 Visual Studio 2005,指向 Microsoft Visual Studio 2005,然後指向 [Visual Studio 2005 工具
- 如果您使用的 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 命令提示字元]。
- 在 [Visual Studio.NET 或 Visual Studio 2005] 命令變更包含 Managed 的 DLL 之目錄的目錄路徑。
- 在 Windows 登錄中註冊組件資訊的 Managed DLL,並建立對應的型別程式庫,請在 Visual Studio.NET 命令提示字元中執行下列命令:
RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb / 程式碼基底
從原生 C + + 程式碼呼叫受管理的 DLL
若要呼叫您剛才從原生 C + + 建立的 Managed 的 DLL 程式碼,請依照下列步驟執行:
- 啟動 Visual Studio.NET 或 Visual Studio 2005。
- 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。
- 如果您使用 Visual C++.NET 2003年,按一下 [專案類型 下的 [Visual C++ 專案,然後按一下 [範本] 下方的 [Win32 主控台專案。如果您使用 Visual C++.NET 2002年,按一下 [專案類型 下的 [Visual C++ 專案,然後按一下 [範本] 下方的 [Win32 專案。如果您使用 Visual C++ 2005年,按一下 [專案類型,] 下的 [Visual C++,然後按一下 [範本] 下方的 [Win32 專案
- 在 [名稱] 文字方塊中輸入 CPPClient,],然後再按一下 [確定]]。
- 如果您使用的 Visual C++.NET 2003年或 Visual C++ 2005年,按一下 [完成]。如果您使用的 Visual C++.NET 2002年,請按一下 [應用程式設定,按一下 [主控台應用程式,然後再按一下 [完成。
- 在程式碼] 檢視中開啟 CPPClient.cpp 檔案。
- 若要匯入 RegAsm.exe 會產生型別程式庫,加入下列程式碼來 CPPClient.cpp file:
// Import the type library.
#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
變更型別程式庫路徑,如果您的電腦上路徑不同於此路徑。 - 若要宣告要使用命名空間,將下列的程式碼加入至 CPPClient.cpp 檔:
using namespace ManagedDLL;
- 若要呼叫 Managed 的 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;
- 按下 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年中。 要這麼做,請您執行下列步驟:
- 按一下 [專案],然後再按一下 [ProjectName 內容。
附註ProjectName 代表專案的名稱。 - 展開 [組態屬性,] 然後按一下 [一般。
- 按一下以選取 通用語言執行階段支援、 舊語法 (/ clr:oldSyntax) 在 通用語言執行階段支援 專案上的設定右窗格,按一下 [套用],],然後再按一下 [確定]。
如通用語言執行階段的相關資訊支援編譯器選項,請造訪下列 Microsoft 網站]:
如需有關公開.NET Framework 元件 COM,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) Web 網站: