使用托管代码调用非托管的MarshalAs查询

本文关键字:MarshalAs 查询 托管代码 调用 | 更新日期: 2023-09-27 18:14:03

这个问题是这个线程的结果。

我的问题是,为什么我们必须为某些参数指定MarshalAs属性,而不为其他参数指定?我本以为c++和c#数据类型之间的差异会大到需要编译器的方向?

请原谅我的无知,因为我以前从未处理过非托管代码:)

欢呼,亚当

使用托管代码调用非托管的MarshalAs查询

未封送的形参只是整型。整型就是整型,到处都是,原生的还是非原生的。因此,不需要任何特殊的指令来处理它们,值只是通过值传递,并且您都设置好了。

指针和字符串更棘手。c#字符串不一定像C字符串那样表示,C字符串只是指向以空结束的字符数组的指针。内部转换可能是必要的。类似地,数组也需要通过引用传递——并明确地告知这样做。

请记住,在非托管代码中,地址只是数据。它们没什么特别的。所以c#编译器需要知道如何把它所知道的关于变量的所有信息转化为数字。