unsafe{ } 不安全代码段,则是C#允许使用非托管指针编程关键字,可以在类或结构声明生,也可以在方法属性声明上,当然也可以在方法体内
如果需要获取成员变量(栈)(固态缓冲区)的指针,需要利用fiexd关键字,而直接分配的则不必
lock // 锁定对象,保证代码的临界区内其他线程无法访问此对象,其他线程如果需要访问会自动等待lock结束后执行
RtlMoveMemory // 复制内存,将Source指向的hMem复制到Destination指向的hMem,Length为复制数据长度
stackalloc // 堆栈上分配内存,并返回void*指针
lstrlen // 返回指针指向的数组长度,也可以通过while来循环检查长度
项目属性->生成->允许不安全代码->打勾
[DllImportAttribute("kernel32.dll", EntryPoint = "lstrlenA")] // #RANDOM INCLUDE STRING HEAD
static extern unsafe int lstrlen(void* ptr);
[DllImportAttribute("kernel32.dll", EntryPoint = "RtlMoveMemory")]
static extern unsafe int RtlMoveMemory(void* Destination, void* Source, int Length);
protected internal unsafe virtual void DEMO()
{
const int _length = 0x10;
byte* _p = stackalloc byte[_length];
lock (this) {
for (var i = 0; i < lstrlen(_p); i++) {
System.Diagnostics.Debug.WriteLine(*_p++);
}
}
}