平台互操作性与不安全代码深度解析
1. 平台调用(P/Invoke)基础
在进行平台调用时,VirtualProtectEx函数是一个重要的例子。其声明如下:
static extern bool VirtualProtectEx( IntPtr hProcess, IntPtr lpAddress, IntPtr dwSize, uint flNewProtect, ref uint lpflOldProtect);这里lpflOldProtect虽文档标记为[out],但实际需指向有效变量而非NULL,建议使用ref而非out来避免潜在问题。其他参数与VirtualAllocEx类似,不过lpAddress需是VirtualAllocEx返回的地址,flNewProtect用于指定具体的内存保护类型,如页面执行、页面只读等。
2. 使用 StructLayoutAttribute 进行顺序布局
有些 API 涉及的类型在托管代码中无对应类型,需在托管代码中重新声明。以COLORREF结构体为例: