CLR via C# 读书笔记1-9

本文介绍CLR提供的三种与非托管代码交互方案,包括P/Invoke机制调用DLL中的非托管函数、使用COM组件及将托管类型暴露给非托管代码。此外还提及了.NET Framework SDK中的相关工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与非托管代码的互操作

CLR 提供3种与非托管代码的交互方案:
■ 托管代码通过使用 P/Invoke 机制 来调用DLL文件中的非托管函数
许多 FCL 中定义的类型内部都有调用到 Kernel32.dll, User32.dll 等等文件中的函数。同时许多程序语言会提供托管代码调用非托管代码的简便途径,比如 C# 程序能够直接调用 从Kernel32.dll 导出的 CreateSemaphore 函数。
■ 托管代码可使用已存在的 COM 组件(服务器)
为这些COM 组件生成一个托管程序集(它提供了该COM 组件的详细描述),其他的托管程序就能通过使用该生成的托管程序集进行互操作。详细请参考.NET Framework SDK 中的 TlbImp.exe 工具。 如果碰巧手头没有该工具,或者你想对 TlbImp.exe 生成的代码有更多自定义,你可以手工建立实现互操作功能的源代码。例如:你能在 C# 程序中使用 DirectX COM 组件。
■ 非托管代码可使用托管类型 (服务器)
为托管代码生成一个 COM 组件是最简单的方法。请参考.NET Framework SDK 中的 TlbExp.exe 和 RegAsm.exe工具。

提示:Microsoft 已经公开了以上工具 (Type Library Importer tool 以及 P/Invoke Interop Assistant tool)的源代码,请访问 http://CLRInterop.CodePlex.com/

随着 Windows 8 的发布,Microsoft 导入了新的 Windows API: Windows Runtime (WinRT)。这个 API 内部也是通过 COM 组件来实现,但是由于使用了ECMA 标准metadata来描述这些COM 组件,几乎所有WinRT API 都能被托管代码直接使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值