概述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 中运行非托管代码的骚操作
说明:深入探讨 .NET 运行时调用非托管代码的内部机制,包括:
- Fcall / Qcall:CLR 内部的快速调用路径,托管代码通过它们请求本地代码执行
- Marshal.GetDelegateForFunctionPointer:将非托管函数指针转换为委托,是 P/Invoke 的底层基础
- 其他非托管互操作的奇技淫巧
与本文的
DllImport互补——本文讲”怎么声明调用”,那篇文章讲”底层怎么实现的”。阅读量:⭐⭐⭐⭐(进阶 / 4/5)
- 前提:熟悉 C#、了解 CLR 基本概念
- 适合:想深入理解 .NET 运行时与原生代码互操作机理的开发者