当我们需要在C#中使用外部库或者是系统提供的API时,可以通过以下多种方式进行API调用:
1. DllImport方式调用API
步骤
- 首先需要在命名空间中添加
using System.Runtime.InteropServices
,该命名空间为DllImport方法所在的命名空间。 - 在需要使用API的方法上方添加DllImport特性,该特性包含了API的名字、相关参数、库的路径等信息。
- 调用API函数。
示例
以下为获取当前系统时间的API调用示例:
using System;
using System.Runtime.InteropServices;
class MainClass {
[DllImport("kernel32.dll")]
static extern void GetSystemTime(ref SYSTEMTIME lpSystemTime);
static void Main() {
SYSTEMTIME time = new SYSTEMTIME();
GetSystemTime(ref time);
Console.WriteLine("The system time is: {0}/{1}/{2} {3}:{4}:{5}", time.wMonth, time.wDay, time.wYear, time.wHour, time.wMinute, time.wSecond);
}
}
[StructLayout(LayoutKind.Sequential)]
public class SYSTEMTIME {
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
}
2. 使用COM组件
如果需要使用的API是COM组件,则可以通过以下步骤进行API调用:
步骤
- 添加COM组件的引用。
- 创建COM对象并调用方法。
示例
以下为使用Windows Script Host COM组件输出系统路径的示例:
using System;
using IWshRuntimeLibrary;
class MainClass {
static void Main() {
WshShell shell = new WshShell();
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut("notepad.lnk");
Console.WriteLine("Target path: {0}", shortcut.TargetPath);
}
}
3. 使用P/Invoke调用API
P/Invoke是一种使用非托管代码编写托管应用程序的技术。我们可以通过以下步骤使用P/Invoke方式调用API:
步骤
- 在需要使用API的方法上方添加
unsafe
和extern
特性,unsafe
表示使用非安全代码,extern
表示允许使用非托管函数。 - 定义调用API的相关参数和类型,如指针、结构体等。
示例
以下为改变控制台颜色的API调用示例:
using System;
using System.Runtime.InteropServices;
class MainClass {
[DllImport("kernel32.dll")]
unsafe static extern bool SetConsoleTextAttribute(IntPtr hConsoleOutput, short wAttributes);
static void Main() {
Console.WriteLine("Before color change");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (short)0x000C);
Console.WriteLine("After color change");
}
const int STD_OUTPUT_HANDLE = -11;
[StructLayout(LayoutKind.Sequential)]
struct COORD {
public short X;
public short Y;
}
[DllImport("kernel32.dll")]
static extern IntPtr GetStdHandle(int handle);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetConsoleCursorPosition(IntPtr hConsoleOutput, COORD cursorPosition);
}
以上是在C#中使用API调用的三种方式,分别是DllImport方式、COM组件方式和P/Invoke方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中API调用的多种方法 - Python技术站