当我们需要使用C#调用外部的DLL库时,可以使用DLLImport属性,该属性可以将一个非托管DLL包装在托管类中。下面是详细的步骤:
1. 创建一个DLL库
首先,你需要创建一个非托管的DLL库,此处以C++语言为例,假设你已经创建了一个名为"test.dll"的库,其中包含了以下函数:
#include <iostream>
using namespace std;
extern "C" __declspec(dllexport) int Add(int a, int b)
{
return a + b;
}
其中,extern "C"
表示函数使用C++风格的函数名装饰,__declspec(dllexport)
表示该函数需要暴露给外部库使用。
2. 创建C#项目
接着,你需要创建一个C#项目,并添加对应的引用。
首先,添加以下using命名空间:
using System.Runtime.InteropServices;
然后,在类中定义导入函数:
[DllImport("test.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int Add(int a, int b);
其中,DllImport
属性指定了要导入的库的名称,并且指定了C语言调用约定。
3. 调用DLL库函数
现在,你已经准备好了C#项目,并且已经定义了对DLL库的引用。来看一下如何在C#代码中调用"Add"函数。
int result = Add(1, 2);
Console.WriteLine("Result: " + result);
以上代码中,我们使用定义的"Add"函数计算了1+2的和,并将结果打印到控制台。
示例1
下面是一个完整的示例,展示如何使用C#调用test.dll库中的"Add"函数。
步骤1:创建DLL库
打开Visual Studio,新建一个Win32控制台应用程序,命名为test。
添加一个新的源文件test.cpp,将以下代码复制到其中:
#include <iostream>
using namespace std;
extern "C" __declspec(dllexport) int Add(int a, int b)
{
return a + b;
}
生成该项目,并在Debug文件夹下的test.dll文件。
步骤2:创建C#项目
新建一个C#控制台应用程序,命名为TestDLLImport。
添加对System.Runtime.InteropServices的引用,然后在尝试添加以下代码到Program.cs中:
using System;
using System.Runtime.InteropServices;
namespace TestDLLImport
{
class Program
{
[DllImport("test.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern int Add(int a, int b);
static void Main(string[] args)
{
int result = Add(1, 2);
Console.WriteLine("Result: " + result);
}
}
}
生成该项目,并将test.dll文件拷贝到生成的Debug文件夹下。
步骤3:运行C#程序
启动该应用程序,你应该将在控制台上看到以下消息:
Result: 3
这意味着你已经成功地从C#程序中调用了test.dll库中的"Add"函数,计算了1+2的和。
示例2
下面是另一个示例,展示如何使用C#调用Windows API函数。
步骤1:定义Windows API函数
打开Visual Studio,并新建一个空项目,命名为WinAPI。
选择"退出",在项目文件夹中创建一个新文件"WinAPI.cs"。
将以下代码复制到WinAPI.cs中:
using System;
using System.Runtime.InteropServices;
namespace WinAPI
{
class Program
{
[DllImport("user32.dll")]
public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
static void Main(string[] args)
{
IntPtr hWnd = new IntPtr(0);
string text = "Hello World!";
string caption = "MessageBox Example";
uint type = 0x00000001;
MessageBox(hWnd, text, caption, type);
}
}
}
生成该项目,在WinAPI.exe文件中,你应该能够看到一个弹出的MessageBox,标题为"MessageBox Example",内容为"Hello World!"。
以上是C#使用DLLImport调用外部DLL的方法的完整攻略!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用DLLImport调用外部DLL的方法 - Python技术站