P/Invoke的参数封送

本文详细探讨了P/Invoke技术在.NET中如何进行参数封送,涉及Windows API调用,DLL交互以及不同数据类型的转换规则,揭示了底层封送机制的关键细节。
摘要由CSDN通过智能技术生成

P/Invoke的参数封送

我们知道,托管代码与非托管代码存在很大的差异,P/Invoke在传递参数、返回值时需要先在托管类型和非托管类型之间进行转换,这整个过程有个专门术语,就叫做封送(Marshal)
P/Invoke可以为常规的数据类型进行正确地封送处理,如整型int,字节型byte。这些常规的数据类型被称为blittable 类型,它们在托管代码和非托管代码中具有相同的表示,P/Invoke在对它们进行封送时不需要进行任何特殊处理。因此使用blittable 类型的非托管函数以用相同表示的托管类型导入其定义。假如有一个DLL中的函数的C++签名为:
int DllFunction_1(int index);
按如下方式导入定义:
[DllImport("dllfile.dll")]
public static extern int DllFunction_1(int i);
在这种情况下,P/Invoke不需要进行任何特殊处理,可以正确地进行参数和返回值的封送。
具体blittable 类型包括:

托管代码类型
C++代码类型
System.Byte
unsigned char
System.SByte
byte
System.Int16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值