预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共17页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Microsoft.NETCompactFramework上的高级P/Invoke 发布日期:10/29/2004|更新日期:10/29/2004 JonBox,DanFox HYPERLINK"http://atomic.quilogy.com/"Quilogy 编著: JonathanWells MicrosoftCorporation 适用于: Microsoft_.NETCompactFramework1.0 Microsoft_VisualStudio_.NET2003 摘要:探讨.NETCompactFramework的高级互操作性。 本页内容 HYPERLINK"http://msdn.microsoft.com/zh-cn/library/aa446529.aspx"\l"EFAA#EFAA"简介HYPERLINK"http://msdn.microsoft.com/zh-cn/library/aa446529.aspx"\l"EEAA#EEAA"封送处理复杂类型HYPERLINK"http://msdn.microsoft.com/zh-cn/library/aa446529.aspx"\l"EDAA#EDAA"封送处理结构中的字符串HYPERLINK"http://msdn.microsoft.com/zh-cn/library/aa446529.aspx"\l"ECAA#ECAA"封送处理结构中的定长字符串HYPERLINK"http://msdn.microsoft.com/zh-cn/library/aa446529.aspx"\l"EBAA#EBAA"小结 简介 在上一篇文章“Microsoft.NETCompactFramework上的P/Invoke和封送处理简介”中,我们讨论了Microsoft.NETCompactFramework和Microsoft.NETFramework中的平台调用服务如何允许托管代码调用驻留在非托管DLL中的函数,进而允许自定义以及操作系统(WindowsCE)API可由为上述任何一种框架编写的应用程序访问。虽然此服务的很多功能在这两种框架中都是一样的,但由于.NETCompactFramework是完整的.NETFramework的一个子集,所以存在一些差异,有些差异我们已经在上一篇文章中进行了探讨。在本白皮书中,我们将集中讨论在封送处理结构时产生的两个特定问题,以及在.NETCompactFramework中如何对它们进行处理。 HYPERLINK"http://msdn.microsoft.com/zh-cn/library/aa446529.aspx"\l"mainSection#mainSection"返回页首 封送处理复杂类型 正如上一篇文章中所提及的,.NETCompactFramework中的封送拆收器和完整的.NETFramework中的封送拆收器之间的一个主要差异是:较轻型的.NETCompactFramework封送拆收器不能封送处理结构或类中的复杂对象(引用类型)。这就意味着,如果结构或类中有字段定义为在.NETCompactFramework和非托管代码之间不存在通用表示形式的类型(称为blittable类型,这些类型在上一篇文章中列出),则该结构或类不能被完全地进行封送处理。从实际的角度来说,这意味着包含字符串指针或者定长字符缓冲的结构或类均不能被正确地封送处理。 作为一个例子,请考虑WindowsCE上可用的用户通知API。使用此API,应用程序可以在特定的时间,或者在响应某个事件(比如同步)时,或者在更换PC卡时,显示通知对话框或引发某个应用程序的执行。因为.NETCompactFramework不包括执行此功能的托管类,所以需要该功能的开发人员就需要使用P/Invoke进行正确的操作系统调用。 要使用WindowsCE通知API(CeSetUserNotificationEx),用于定义什么事件激活此通知的结构(CE_NOTIFICATION_TRIGGER)需要在托管代码中进行声明,并在VB.NET中进行如下的直接转换,其中SYSTEMTIME是另一个完全由blittable类型组成的结构,NotificationTypes和EventTypes是映射至整数的枚举。 PrivateStructureCE_NOTIFICATION_TRIGGER DimdwSizeAsInteger DimdwTypeAsNotificationTypes DimdwEventAsEventTypes DimlpszApplicationAsString DimlpszArgumentsAsString D