让代码更简单

当前位置:代码狗 > 开发教程 > C#开发教程 > 正文

C#调用非托管代码Windows API

重要:本文最后更新于2019-11-23 08:22:21,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

Windows API微软窗口应用程序接口,因为它,开发者才能调用Windows系统接口,实现各种功能及操作。Windows API在Windows系统中以非托管代码形式存在,包含在系统目录下的.dll的文件中,以导出函数的形式对外公开。

由于.net框架编写不够完善,很多功能我们需要自行调用Windows API才能实现,因此,如何调用非托管代码的Windows API是一项必须会的技能,下面一起来学习下吧。

.net中System.Runtime.InteropServices类提供了使用非托管代码的功能,所以在程序开始前引用之。

using System.Runtime.InteropServices;

然后使用DllImport关键字引入dll文件,并导入需要使用的函数。

[DllImport("User32.dll", EntryPoint = "MessageBox")]
public static extern int MessageBoxapi(int h, string m, string c, int type);

注意:导入的函数名称要与dll文件中的名称一致,否则需要EntryPoint属性指定新名称。

每个Win32 API函数在MSDN文档中都能找到其原型声明,以及位于哪个.dll文件中。因此,在导入API函数时,现在MSDN文档中找到该函数的声明,然后分析它的参数和返回值,并且获知函数位于哪个.dll文件中,最后就可以将其导入为托管代码了。

MSDN文档地址:https://docs.microsoft.com/zh-cn/windows/desktop/apiindex/windows-api-list

C#实例:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("User32.dll", EntryPoint = "MessageBox")]
public static extern int MessageBoxapi(int h, string m, string c, int type);

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(".net messagebox");
}

private void button2_Click(object sender, EventArgs e)
{
MessageBoxapi(0, "MessageBoxapi", "winapi", 5);
}

}
C#调用非托管代码Windows API

C#调用非托管代码Windows API

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏

评论 抢沙发

×

请作者吃根烤肠!

支付宝