C# 指针

 

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++);
                }
            }
        }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值