深入理解平台调用服务(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
订阅专栏 解锁全文
54

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



