C#中Pinvoke的使用2

本文详细阐述了在C#中使用指针与IntPtr的场景与注意事项,包括传递指针的目的、ref关键字的误用与避免、不同类型长度的对应以及可能导致的内存越界错误。
1, 关于指针,如果参数是(数组)指针,可以考虑用IntPtr,具体使用如下
      new IntPtr(pxx)
      注意,按照意义,传递指针是为了改变指针指向地址的内容,而不是指针本身的内容,所以ref是不必要,除非你想改变指针本身。
      (如果使用了ref,会直接崩溃,从这个现象上看,ref还是将变量变换成了指针之后然后再传递给了访问函数)
2,关于常规类型的指针,可以直接使用ref引用,而不必使用IntPtr
3,类型长度的对应,比如C++中,long是32位,而在C#中long是64位,所以不要简单替换,
     如果刚巧又是指针形式出现,很容易发生System.AccessViolationException 内存越界访问

转载于:https://www.cnblogs.com/kevinzhwl/archive/2010/09/02/1815799.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值