.net 互操作概述

.net 互操作概述

ID:21976471

大小:75.50 KB

页数:21页

时间:2018-10-21

.net 互操作概述_第1页
.net 互操作概述_第2页
.net 互操作概述_第3页
.net 互操作概述_第4页
.net 互操作概述_第5页
资源描述:

《.net 互操作概述》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、.NET互操作概述互操作性使您能够保留和利用在现有非托管代码中的投入互操作是托管和非托管代码之间的调用,COM、COM+、C++组件、ActiveX组件和Win32API都是非托管代码.NETFramework通过平台调用服务、System.Runtime.InteropServices命名空间和CLR以及通过COM互操作性(COM互操作)支持与非托管代码的互操作性.NET互操作方式平台调用C++中的ItJustWorks(IJW)COM互操作.NET互操作特点PInvoke和COM互操作都使用封送处理在托管和非托管代码之间转换诸如整数、字符串、数组、结构

2、和指针等参数平台调用概述平台调用使托管代码能够调用从非托管动态链接库(DLL)导出的函数,比如Win32API和自定义DLL。利用平台调用这种服务,托管代码可以调用在动态链接库(DLL)(如Win32API中的DLL)中实现的非托管函数。此服务将查找并调用导出的函数,然后根据需要跨越互用边界封送其参数(整数、字符串、数组、结构等)。出于性能的考虑,应检查.NETFramework中是否有可用的等价函数而不是使用平台调用。平台调用依赖于元数据在运行时查找导出的函数并封送其参数可以调用Win32API和其他DLL中的函数来控制操作系统中的一大部分平台调用通常做

3、法标识DLL中的函数最低限度上,必须指定函数的名称和包含该函数的DLL的名称创建用于容纳DLL函数的类可以使用现有类,为每一非托管函数创建单独的类,或者创建包含一组相关的非托管函数的一个类在托管代码中创建原型[VisualBasic]使用带Function和Lib关键字的Declare语句。在某些少见的情况下,可以使用带SharedFunction关键字的DllImportAttribute。这些情况在本节后面部分进行说明。[C#]使用DllImportAttribute标识DLL和函数。用static和extern修饰符标记方法。[C++]使用DllIm

4、portAttribute标识DLL和函数。用extern“C”标记包装方法或函数。调用DLL函数像处理其他任何托管方法一样调用托管类上的方法。传递结构和实现回调函数属于特殊情况。平台调用过程查找包含该函数的DLL。将该DLL加载到内存中。查找函数在内存中的地址并将其参数推到堆栈上,以封送所需的数据。将控制权转移给非托管函数。平台调用过程注意:只在第一次调用函数时,才会查找和加载DLL并查找函数在内存中的地址。平台调用会向托管调用方引发由非托管函数生成的异常标识DLL中的函数函数的名称和序号(函数入口点)实现所在的DLL文件的名称(文件在那)DLL内容说明

5、GDI32.dll用于设备输出的图形设备接口(GDI)函数,例如用于绘图和字体管理的函数。Kernel32.dll用于内存管理和资源处理的低级别操作系统函数。User32.dll用于消息处理、计时器、菜单和通信的Windows管理函数。常用的DLL创建用于容纳DLL函数的类要封装平台功能,一种有效的方法是将常用的DLL函数包装在托管类中。虽然不必在每种情形下都这样做,但由于定义DLL函数可能会相当麻烦并且容易出错,所以提供类包装是一种很方便的方法。在一个类中,为每个要调用的DLL函数定义静态方法。定义中可以包括一些附加信息,如在传递方法参数时使用的字符集或

6、调用约定;如果省略这些信息,将选择默认设置。包装之后,就可以按照对其他任何静态函数调用方法的相同方式来对该函数调用方法。平台调用将自动处理底层的导出函数在托管代码中创建原型指定DLL指定函数入口点非托管函数在托管的原型定义可以调整平台调用的默认值usingSystem.Runtime.InteropServices;publicclassWin32{[DllImport("user32.dll",EntryPoint="MessageBoxA")]publicstaticexternintMsgBox(inthWnd,Stringtext,Stringca

7、ption,uinttype);}调整定义无论是否显式设置属性字段,属性字段都可用于定义托管代码的行为。平台调用将按照在程序集中作为元数据存在的各个字段上设置的默认值来执行操作。通过调整一个或多个字段的值,可更改此默认行为。在许多情况下,可使用DllImportAttribute来设置值。BestFitMapping启用或禁用最佳匹配映射。CallingConvention指定用于传递方法参数的调用约定。默认值为WinAPI,该值对应于基于32位Intel的平台的__stdcall。CharSet控制名称重整以及将字符串参数封送到函数中的方式。默认值为Ch

8、arSet.Ansi。EntryPoint指定要调用的DLL入口点

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。