各种与本地代码互操作技术(包括平台底层、第三方SDK、自己编写的C++代码)
1.理解平台调用服务
平台调用服务Platfrom Invocation Service,PInvoke
使用PInvoke,可以再托管代码中调用(用C或C++编写的)本地方法
这个功能位于System.Runtime.InteropServices命名空间
www.pinvoke.com
extern关键字
添加System.Runtime.InteropService.DllImportAttribute类型的属性(attribute),公共字段
C语言:方法的名称就是入口点的名称
C++:改编mangling
反改编unmaigling,Depends.exe或Dumpbin.exe工具显示DLL中的函数
示例:NativeDll
1)封送marshaling
.NET类型和默认的封送行为
强制制定封送行为:MarshalAsAttribute
UnmanagedType的成员
本地结构
类class:类的实体位于堆中,封送的为“引用”
结构struct:封送的是堆栈stack中的“值”
拆收器marshaler
2)NativeMethods
Compact Framework不支持CAS(代码访问安全Code Access Security)
管理PInvoke声明时,将所有仅在内部使用的结构放在NativeMethods类中
3)Media示例
4)对托管代码进行回调
三种方法:使用Windows消息,MessageWindow类
通过系统事件句柄和后台线程上的API方法WaitForSingleObject
将托管的委托传给本地API函数:该委托以函数指针的形式封送
MessageWindow:RegisterWindowMessage
已命名事件(named event)
EventWaitHandle类
函数指针
2.理解COM互操作
组件对象模型(Component Object Model,COM)是一种本地的面向对象编程模型
一个组件能都支持多个接口,每个接口通过一个唯一的Guid来识别
1)COM库的导入
.dll文件或类型库.tlb文件
2)接口的手动定义
访问CEMAPI的主要接口为IMAPISession
接口类型
后期绑定late binding
ComInterfaceType枚举的三个成员:InterfaceIsDual/InterfaceIsDispatch/InterfaceIsIUnknown
COM错误处理
设备相关的问题
www.inthehand.com/WindowsMobile.aspx
共用体结构
3)ActiveX控件
Compact Framework不直接支持ActiveX控件包容(hosting)
msdn2.microsoft.com/zh-cn/library/aa446515.aspx
microsoft mobile 移动应用开发宝典----读书笔记(14)
最新推荐文章于 2022-02-10 23:23:46 发布