观.NET Compact Framework中的P.Invoke

本文介绍了.NET平台中P/Invoke机制及数据转换原理,包括CLR如何与本机代码交互、不同类型的数据映射规则,以及如何处理P/Invoke错误。
1. p/Invoke = Platform Invoke. 就是dotnet clr调用native function的一种机制
2. Data Marshaling : Marshaling字面意思是信号汇整。实际上就是clr传递数据到native时如何转换的问题。
 引用类型是以指针方式传递的。不能加ref/out。
 System.Boolean映射成BOOL
 System.Char映射成字符类型,具体请参照MSDN
 System.IntPtr映射成Handle. Int32.Zero用于比较或设置NULL
 如果Native是LPTSTR时,要用StringBuilder,并分配空间再传递。因为有可以Native会写回数据。如果是LPCSTR时,则用String
 如果是Native函数参数是指针参数时,用ref/out传递值类型,而引用类型直接书写不需要书写ref/out。比如Struct是值类型,用它就得用out/ref.但同样可以用class代替。这时就不用ref/out。但此时class需要用一个属性[StructLayout(LayoutKind.Sequential)],这时才能保证和Struct声明一样的内存形式。
3. 如果发生p/invoke错误,最好用Marshal.GetLast32Err()得到错误信息,然后再用异常处理抛出异常。
4. 可以到 http://www.paulyao.com/resources/tools/pinvoke.asp下载工具来自动转换

转载于:https://www.cnblogs.com/sdikerdong/archive/2006/12/27/605466.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值