概述C#] 代码中调用 DLL 中的接口

如下所示:调用过程很简单。

调用 Kernel32 中的函数

[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_BASIC_INFORMATION
{
    public IntPtr BaseAddress;
    public IntPtr AllocationBase;
    public uint AllocationProtect;
    public IntPtr RegionSize;
    public uint State;
    public uint Protect;
    public uint Type;
}
 
[DllImport("kernel32.dll")]
public static extern int VirtualQuery(IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength);
 
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr GetModuleHandle(string lpModuleName);

扩展阅读

📖 文章:在 .NET 中运行非托管代码的骚操作

来源:先知社区 - aliyun.com

说明:深入探讨 .NET 运行时调用非托管代码的内部机制,包括:

  • Fcall / Qcall:CLR 内部的快速调用路径,托管代码通过它们请求本地代码执行
  • Marshal.GetDelegateForFunctionPointer:将非托管函数指针转换为委托,是 P/Invoke 的底层基础
  • 其他非托管互操作的奇技淫巧

与本文的 DllImport 互补——本文讲”怎么声明调用”,那篇文章讲”底层怎么实现的”。

阅读量:⭐⭐⭐⭐(进阶 / 4/5)

  • 前提:熟悉 C#、了解 CLR 基本概念
  • 适合:想深入理解 .NET 运行时与原生代码互操作机理的开发者