要实现c#调用c++的DLL,需要以下几个步骤:
- 在c++中定义函数
- 将该函数导出,以便c#可以访问它
- 在c#中声明该函数
- 使用DllImport特性将函数与DLL绑定
- 调用该函数
下面是更详细的步骤以及两个示例:
- 在c++中定义函数
在c++中,定义一个函数,假设函数名为sum,功能是对两个数字求和。代码如下:
extern "C" __declspec(dllexport) int sum(int x, int y)
{
return x + y;
}
注意这里用到了 extern "C" 和 __declspec(dllexport)。
- 将该函数导出,以便c#可以访问它
将 sum 函数导出到 DLL 中供 C# 调用。可以使用 .def 文件来导出,也可以使用 __declspec(dllexport) 关键字,示例代码如下:
extern "C"
{
__declspec(dllexport) int sum(int x, int y);
}
- 在c#中声明该函数
使用 DllImport 特性在 C# 中声明函数,示例代码如下:
[DllImport("example.dll")]
public static extern int sum(int x, int y);
这里的 example.dll 是包含 sum 函数的 c++ DLL 的名称。
- 使用DllImport特性将函数与DLL绑定
使用 DllImport 特性将 sum 函数与 DLL 绑定,示例代码如下:
[DllImport("example.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int sum(int x, int y);
这里指定 CallingConventions = CallingConvention.Cdecl,表示该函数遵循 Cdecl 调用惯例。
- 调用该函数
c++ DLL 已经可以被 C# 访问。可以在 C# 中调用 sum 函数,示例代码如下:
int result = sum(1, 2);
Console.WriteLine("1 + 2 = " + result.ToString());
现在可以在 C# 中调用包含 sum 函数的 C++ DLL 了。
接下来是两个示例:
示例1:将两个数字相加
c++ DLL 中定义求和函数 sum,然后将其导出。C# 中使用 DllImport 特性将 sum 函数与 DLL 绑定,然后调用该函数,把结果打印出来。
c++ 代码:
extern "C" __declspec(dllexport) int sum(int x, int y)
{
return x + y;
}
C# 代码:
[DllImport("example.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int sum(int x, int y);
int result = sum(1, 2);
Console.WriteLine("1 + 2 = " + result.ToString());
示例2:计算一段数组的和
c++ DLL 中定义一个计算数组和的函数 sumArray,然后将其导出。C# 中使用 DllImport 特性将 sumArray 函数与 DLL 绑定,然后调用该函数,把结果打印出来。
c++ 代码:
extern "C" __declspec(dllexport) int sumArray(int* arr, int size)
{
int result = 0;
for (int i = 0; i < size; i++)
{
result += arr[i];
}
return result;
}
C# 代码:
[DllImport("example.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int sumArray(int[] arr, int size);
int[] arr = { 1, 2, 3 };
int size = arr.Length;
int result = sumArray(arr, size);
Console.WriteLine("sum of array = " + result.ToString());
这两个示例都是比较简单的,但是展示了如何在 C# 中调用包含 C++ 函数的 DLL。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#调用c++的DLL的实现方法 - Python技术站