51、深入理解平台调用服务(PInvoke)及实用示例

深入理解平台调用服务(PInvoke)及实用示例

1. PInvoke基础概述

PInvoke(Platform Invocation Services)是一种允许托管代码调用非托管代码的机制。与COM互操作性不同,PInvoke所涉及的需要掌握的主题范围相对较窄,主要依赖于两个核心机制:
- DllImportAttribute的使用 :用于指定要调用的非托管DLL中的函数。在Visual Basic .NET中,也可以使用 Declare 语句来实现类似功能。
- Interop Marshaler规则 :负责在托管代码和非托管代码之间进行数据类型的转换。

CLR内部通过调用 LoadLibrary GetProcAddress 来实现PInvoke功能。这些调用会尽可能晚地进行:
- LoadLibrary :在首次调用某个DLL的导出函数时(如果该DLL尚未加载)。
- GetProcAddress :在首次调用PInvoke方法时。

在调用 GetProcAddress 之前,CLR会检查签名元数据的有效性,确保所有参数和返回类型都可以用于PInvoke。通过使用 Marshal.Prelink Marshal.PrelinkAll ,可以在需要的更早时间进行DLL加载和初始化,这在使用像 Quer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值