当前位置: 首页 > news >正文

C#中的IntPtr类型

C#中的IntPtr类型称为“平台特定的整数类型”,它们用于本机资源,如窗口句柄。

资源的大小取决于使用的硬件和操作系统,但其大小总是足以包含系统的指针(因此也可以包含资源的名称)。 

所以, 在调用的API函数中一定有类似窗体句柄这样的参数,那么当您声明这个函数时,您应该将它显式地声明为IntPtr类型。 

例如,在一个C#程序中调用Win32API mciSendString函数控制光盘驱动器,这个函数的函数原型是: 

MCIERROR mciSendString( 

LPCTSTR lpszCommand, 
LPTSTR lpszReturnString, 
UINT cchReturn, 
HANDLE hwndCallback 
); 

首先在C#中声明这个函数: 
[DllImport("winmm.dll")] 
private static extern long mciSendString(string a,string b,uint c, IntPtr d); 

然后用这样的方法调用: 
mciSendString("set cdaudio door open", null, 0, this.Handle); 

您也可以使用IntPtr.Zero将句柄设置为0; 
或者使用类型强制转换: 
mciSendString("set cdaudio door open", null, 0, (IntPtr)0 ); 

或者,使用IntPtr构造函数: 
IntPtr a = new IntPtr(2121); 

这里有两点比较重要: 
一是在C#中声明Win32API时,一定要按照WinAPI的原型来声明,不要改变它的数据类型,对应过来就行(参考:

常用Win32数据类型与.NET平台数据类型的对应表); 

二是尽量不要过多使用类型强制转换或构造函数的方式初始化一个IntPtr类型的变量,这样会使程序变得难于理解并容易出错。 

 

转载于:https://www.cnblogs.com/peterYong/p/6556556.html

相关文章:

  • 在XCode中使用XCTest
  • wordpress在IIS下无rewrite利用cos-html-cache实现静态页面
  • java基础知识系列---内部类
  • 32BPP窗口模式下24位位图的像素操作(2)
  • 帮你的WordPress博客添加主页、文章页的关键字和描述
  • 域名带www与不带www重定向问题
  • 引用和指针
  • 301重定向www域名
  • sass入门
  • 实现一个均匀Tile的卷轴显示引擎
  • linux rpm包解压
  • 教你彻底实现红黑树:红黑树的c源码实现与剖析
  • 【one day one linux】好用的数据处理工具awk
  • 新年新起点-荣获2011年度Silverlight方向Microsoft® MVP奖
  • java,关于POJO,查阅资料
  • 【Leetcode】101. 对称二叉树
  • 自己简单写的 事件订阅机制
  • @jsonView过滤属性
  • Angular 响应式表单之下拉框
  • hadoop集群管理系统搭建规划说明
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • node 版本过低
  • V4L2视频输入框架概述
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue学习系列(二)vue-cli
  • 大型网站性能监测、分析与优化常见问题QA
  • 聊聊directory traversal attack
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 硬币翻转问题,区间操作
  • 云大使推广中的常见热门问题
  • 运行时添加log4j2的appender
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • #NOIP 2014# day.1 T2 联合权值
  • (13)Hive调优——动态分区导致的小文件问题
  • (安卓)跳转应用市场APP详情页的方式
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)丶RabbitMQ的六大核心
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)ObjectiveC 深浅拷贝学习
  • .net core 控制台应用程序读取配置文件app.config
  • .Net Memory Profiler的使用举例
  • .NET 中的轻量级线程安全
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [30期] 我的学习方法
  • [Angular] 笔记 18:Angular Router
  • [Assignment] C++1
  • [AX]AX2012 R2 出差申请和支出报告
  • [bzoj 3534][Sdoi2014] 重建
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [C#]winform部署yolov5-onnx模型
  • [C++]C++入门--引用