- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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。
您可能关注的文档
最近下载
- 柑橘基地质量管理体系.pdf
- CAD2007入门教程_图文版.ppt VIP
- TSG Z7005—2015 特种设备无损检测机构 核准规则_可搜索.pdf VIP
- DB4419_T 24-2024 社区社会组织孵化服务指南.docx VIP
- 安全可靠分布式事务型数据库技术要求.pdf VIP
- SH3124-2001T 石油化工给水排水工艺流程设计图例.pdf VIP
- 电缆敷设图集 12D101-5.pdf VIP
- 《银行业法律法规与综合能力》课件.pptx VIP
- 2024新信息科技四年级《第二单元 用编码描绘世界》大单元整体教学设计.docx
- 淮北矿业2015年矿瓦斯综合治理“六项指标”考核办法淮北矿业2015年矿井瓦斯综合治理“六项指标”考核办法.doc VIP
文档评论(0)