托管和非托管DLL的概念可以简单理解为使用C#、VB.NET等.NET语言编写的DLL为托管DLL,使用C、C++等非.NET语言编写的DLL为非托管DLL。
本文主要介绍非托管DLL的调用方式。
本文将创建一个Windows窗体项目,通过C#调用Windows系统中user32.dll内的函数,移动鼠标指针至屏幕左上角。
首先要知道DLL文件中需要调用函数的定义,通过查阅资料可知,user32.dll中存在函数:
BOOL SetCursorPos(int X, int Y);
该函数的作用是将光标移动到指定的屏幕坐标。
然后需要在C#项目中,参照上述函数定义方法:
private static extern int SetCursorPos(int x, int y);
对该方法加上DllImport特性,并指定要调用的DLL名称:
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int SetCursorPos(int x, int y);
在窗体中创建一个按钮button1,并在按钮事件中调用SetCursorPos方法,移动鼠标指针至(0,0)坐标:
private void button1_Click(object sender, EventArgs e)
{
SetCursorPos(0, 0);
}
启动项目,点击按钮,就可以看到程序已经成功调用了user32.dll中的SetCursorPos函数,移动鼠标指针到屏幕左上角了。