非淡泊无以明志,非宁静无以致远 -心静如止水,动于静

观.NET Compact Framework中的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下载工具来自动转换
posted @ 2006-12-27 22:41  烟雨客  阅读(239)  评论(0编辑  收藏  举报