C# IntPtr类型和使用/unsafe选项编译程序
1 IntPtr类型
C#中的IntPtr类型称之为“平台特定的整数类型”,用于本机资源,例如窗口句柄;
资源的大小取决于使用的硬件和操作系统,即此类型的实例在32位硬件和操作系统中将是32位,在64位硬件和操作系统中将是64位;但其大小总是足以包含系统的指针(因此也可以包含资源的名称)。
在调用API函数时,类似含有窗口句柄参数(HANDLE)的原型函数,应显示地声明为IntPtr类型。
IntPtr类型对多线程操作是安全的。
int 和IntPtr互转:
int i=1; IntPtr p=new IntPtr(i); int ch_i=(int) p;
IntPtr和string互转:
string str="a";
IntPtr p=Marshal.StringToHGlobalAnsi(str);
string s=Marshal.PtrToStringAnsi(p);
Marshal.FreeHGlobal(p);
2 写一个程序比较指针和IntPtr
代码,
using System;
using System.Runtime.InteropServices;unsafe class Program {static void Main(string[] args) {int variable = 42;int* p = &variable;Console.WriteLine(*p);IntPtr raw = (IntPtr)p;Marshal.WriteInt32(raw, 666);p = (int*)raw;Console.WriteLine(*p);Console.ReadLine();}
}
看命名空间;
首先p是一个指针,先输出p所指的值;
然后使用IntPtr;在相同地址写入值 666 ;然后再输出p所指的值;
将程序存为test1.cs,拷贝到netframework目录,在命令行编译;
构建过程和程序输出如下图;此程序在命令行使用csc.exe编译,必须加 /unsafe 选项,才能编译通过;
C# IntPtr类型和使用/unsafe选项编译程序相关推荐
- C#中的IntPtr类型(指针等用)
c#中无法将类型"int"隐式转换为"System.IntPtr" 这个是我引用了一个api函数时出现的问题,我在声明中把intptr换成了int还是不可 ...
- python语言的整数类型是什么-以下选项属于 Python 整数类型的是( )
[多选题]下列表达式的值为False的是( ) [单选题]关于 Python 语句 P = –P,以下选项中描述正确的是________ [判断题]已知 x, y = 3, 5,那么执行x, y = ...
- C#中unsafe的使用
1. unsafe在C#程序中的使用场合: 实时应用,采用指针来提高性能: 引用非.net DLL提供的如C++编写的外部函数,需要指针来传递该函数: 调试,用以检测程序在运行过程中的内存使用状况. ...
- linux如何右键新建文件夹,在Ubuntu 18.04右键菜单中增加新文档(New Document)及其他类型选项...
本文教你在Ubuntu 18.04操作系统下使用命令操作在右键菜单中增加"新文档(New Document)"选项,包括为不同文件类型增加右键菜单选项的方法.起因是当我尝试创建一个 ...
- c#中无法将类型“int”隐式转换为“System.IntPtr”
问: c#中无法将类型"int"隐式转换为"System.IntPtr" 这个是我引用了一个api函数时出现的问题,我在声明中把intptr换成了int还是不可 ...
- GCC编译器选项及优化提示
很多弟兄可能都很关心如何优化编译自己的程序,虽然本人不赞成"骨灰"玩法,却也不得不承认这是掌握gcc的绝佳途径: 因此献上此帖,以供各位玩家参考,绝对原创噢 =========== ...
- go 根据输入类型执行对应的方法_安全很重要:Go项目的安全评估技术
在今年夏天我们对Kubernetes的评估成功之后,我们收到了大量Go项目的安全评估需求.为此,我们将在其他编译语言中使用过的安全评估技术和策略调整适配到多个Go项目中. 我们从了解语言的设计开始,识 ...
- php curl选项列表(超详细)
第一类:对于下面的这些option的可选参数,value应该被设置一个bool类型的值: 选项 可选value值 备注 CURLOPT_AUTOREFERER当根据Location:重定向时,自动设置 ...
- Linux中光盘使用的文件类型,linux下mount命令使用详解---linux挂载光盘等文件系统...
mount 命令详解 功能:加载指定的文件系统. 语法:mount [-afFhnrvVw] [-L标签] [-o选项] [-t文件系统类型] [设备名] [加载点] 用法说明:mount可将指定设备 ...
- 如何在“首选项”摘要中显示Android首选项的当前值?
这必须经常出现. 当用户在Android应用程序中编辑首选项时,我希望他们能够在Preference摘要中查看首选项的当前设置值. 示例:如果我有"丢弃旧邮件"的"首选项 ...
最新文章
- [RHEL5企业级Linux服务攻略]--第6季 Vsftpd服务全攻略之高级配置
- 欧拉(线性)筛 Miller_Rabin 测试素数
- Dreamweaver 2020安装教程
- 51单片机c语言应用开发三位一体实战精讲 pdf 119网盘,51单片机C语言应用开发三位一体实战精讲.pdf...
- Stark 组件:快速开发神器 —— 自动生成 URL
- visual c 语言参考手册pdf,Microsoft-Visual-C-6-0语言参考手册(三).pdf
- mysql启动命令 windows_Windows下Nginx的启动停止等基本操作命令详解
- 漂亮的jQuery tab选项卡插件
- 拍照尺寸 ios_iOS 14照片和相机:QuickTake快捷键,照片标题,镜像自拍照等
- VB小技巧 文本框中屏蔽系统右键菜单用自定义菜单代替自带右键菜单
- 方便自己的一些学习科研的记录 【小神器】
- Win7 系统解压安装
- iOS 10 消息推送(UserNotifications)秘籍总结(一)
- word图片与文字居中对齐
- matlab面板数据怎么求增长率的公式,环比增长率怎么算公式表格(教你如何计算同比增长率)...
- 【Linux】如何查看命令运行历史时间以及操作人IP
- 【Vue基础】前端工程化Vue项目
- 音量控制按钮有小红叉插头已从插孔拔出
- Remix编辑器连接本地(最新)
- 网络与信息安全学习(二)
热门文章
- jad环境变量配置_Jad_反编译Class文件
- 怎么看计算机的硬盘牌子,硬盘序列号,详细教您怎么查看硬盘序列号
- SPSS软件应用于因子分析/相关性分析等统计分析方法解读
- vim内部实现完美运行代码和脚本
- 基于大数据的高校贴吧舆情数据分析系统
- c语言5的阶乘流程图_求n流程图(求n的阶乘的算法框图)
- 产品经理技能学习:流程图绘制及规范
- 利用遗传算法解决TSP问题(C++)
- 【教程】迅为iTOP-4412精英版exynos4412开发板搭建原生Linux最小系统(四)
- MongoVUE的基本使用