C#编写执行unsafe代码入门
- 原创
- |
- 浏览:10843
- |
- 更新:
- |
- 标签:编程语言
介绍使用C#编写unsafe代码:比如指针操作,无边界检查的数组操作,与一些其他语言编写的模块交互等不安全代码。介绍unsafe有关设置以及简单示例。
方法/步骤
默认情况下,C#是不允许不安全代码的,unsafe声明出错。因此首先需要修改设置。
在菜单栏,找到项目->属性,在属性面板找到生成选项卡,勾选允许不安全代码。
然后我们就可以编写不安全代码了。unsafe关键字可以修饰一个语句块,语句块内可以支持指针类型,有指针操作,无边界检查等。
如图,bitData.Scan0是一个IntPtr类型,在unsafe代码块中把该指针类型转换为byte*,进行指针操作。
unsafe关键字还可以修饰函数,类等。被修饰的域将允许不安全代码。
如图编写了一个unsafe的函数,传入参数有一个char*指针。
另外,如果要获取变量的指针,需要放入fixed语句获取指针。fixed必须在unsafe内部使用,用于固定指针指向的变量,避免运行时环境将变量挪动位置。
如图,在fixed语句块中,获取一个指向string类型字符串数据的char*指针,接着调用unsafe的函数修改字符串。
C#在调用一些API和别的程序模块时,也常常需要指针。C#有一个类型IntPtr,常用来传递指针类型,读者可自行了解。
如图,C#调用Managed DirectX库的时候,如果要获取比如VertexBuffer的某些指针成员,就必须在unsafe中使用。
- 该信息非法爬取自百度经验
C#和C++的函数指针有挺大的区别,C#中使用托管来传递函数,也使用托管向CPP模块传递函数指针。如图,是托管的简单用例。
红框内的属性是为了传给CPP模块,图中并未演示向CPP传函数指针,因此不需要这个属性。
END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部














