.NET 中调用非托管代码:PInvoke 与数据封送
1. 非托管代码存在的必要性
在编程领域,Microsoft .NET Framework 是一项重大变革,托管应用程序正逐渐成为 Microsoft Windows 软件套件中最常见的应用类型。然而,即使是 .NET Framework 的忠实拥护者,也不能合理地预期非托管代码会很快消失,主要有以下三个原因:
- 重写成本高 :将所有现有软件重写为托管代码的成本过高,而且作为托管应用程序运行所带来的优势不足以证明这种迁移成本的合理性。
- COM 组件依赖 :许多 Windows 程序员目前只能使用 COM 组件形式的服务,例如 Microsoft Office Word 或 Excel 的对象库。
- 功能未封装 :.NET Framework 涵盖了操作系统的许多功能,但并非全部。编写 shell 扩展、处理内存映射文件或进行进程间窗口子类化等 Windows 功能仍需要非托管代码,因为这些功能尚未封装在 .NET Framework 中。
为了在 .NET Framework 应用程序中利用非托管代码,Microsoft 提供了两种相关但不同的机制:Platform Invoke(简称 PInvoke)和 COM Interop。PInvoke 允许 .NET 代码调用“传统”的 DLL,如构成 Windows 内核的 DLL 或用 C 或 C++ 编写的 DLL;而 COM Interop 则允许在 .NET Framework 语言中重用 COM 组件,或从 COM 应用程序中调用 .NET
超级会员免费看
订阅专栏 解锁全文
48

被折叠的 条评论
为什么被折叠?



