与托管对象交互操作(定稿).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
与托管对象交互操作(定稿).doc

与托管对象交互操作 课堂练习:调用Win32 API 解决Win32PlaySound_Error类的PlaySound_DllImport 函数中的错误。 打开Win32PlaySound_ErrorClass 文件,查看PlaySound_DllImport 函数。在函数中有一个错误。你可以试着测试它以确认该错误。该错误是什么呢? 答:函数将ExactSpelling 显示设置为True;然而,EntryPoint被设置为PlaySound。但是,在Winmm.dll中,函数PlaySound并不存在;只有 PlaySoundA (Ansi) 和PlaySoundW (Unicode)存在。要纠正这个错误,将 ExactSpelling设置为False。另一个纠正此错误的方法是将EntryPoint显示设置为PlaySoundW。 习题 运行库为每个COM对象创建几个RCW a) 2 b) 1 c) 0 d) COM对象上的引用数目 答:B 在C#中,如果要使用API MessageBox,可以用: a) [DllImport(user32.dll)] public extern int MessageBox(int hWnd, String text, String caption, uint type); b) [DllImport(user32.dll)] public static int MessageBox(int hWnd, String text, String caption, uint type); c) [DllImport(user32.dll)] public int MessageBox(int hWnd, String text, String caption, uint type); d) [DllImport(user32.dll)] public static extern int MessageBox(int hWnd, String text, String caption, uint type); 答:D 列出 COM 和.NET 组件之间的一些不同之处。 答:COM是基于二进制标准的。类的内部二进制布局必须遵守COM的规则。.NET 是基于类型标准的。.NET 中的通用类型系统建立了一个跨语言集成、类型安全和高性能代码执行的框架。 COM 使用类型库来存储类型信息。在.NET Framework中,类型信息作为元数据存储,并且对所有类型来说是强制的。元数据嵌入在程序集内部。 COM 方法通常返回一个HRESULT来指示调用成功或失败。在.NET中,托管代码具体表现为异常。 COM 对象的客户端通过引用计数的方式管理对象生存期。在.NET中,运行库通过垃圾回收管理对象的生存期。 COM 使用 GUID进行标识,.NET使用强名称进行标识。 如何在基于.NET的应用程序中调用 COM 组件? 答:当 .NET 客户端加载一个COM对象时,将创建一个RCW。 使用从类型库导出的元数据,运行库创建被调用的COM对象和该对象的包装。 每个RCW都在它包装的COM对象上维护一个接口指针缓存。 运行库随后对 RCW执行垃圾回收。 描述RCW 在互操作中的角色。 答:维护对象生存期。 封送在托管与非托管代码之间的方法调用。 使用选定的 COM接口,而不会将其向 .NET 客户端公开。 允许开发人员在编码时把由 RCW包装的COM 对象当作普通对象来使用。 用来生成Interop程序集最常用的两种方法是什么? 答:Visual Studio .NET IDE和 TLBIMP 工具。 列出平台调用服务的功能。 答:查找包含函数的DLL。 将DLL 加载到内存中。 查找函数在内存中的地址并将其参数推送到堆栈上,以封送所需的数据。 将控制权转移给非托管函数。 将非托管代码函数生成的异常返回给托管调用方。 如何在基于.NET的应用程序中调用 Win32 API? 答: 1)确定要调用函数的名称、参数、参数类型、返回值以及包含它的DLL的名称和位置。 2)在Visual Studio .NET中创建一个新类。 3)导入System.Runtime.InteropServices 命名空间。 4)用DllImport定义函数。 5)添加代码从Windows 窗体中调用Win32 API。

文档评论(0)

zhengyl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档