使用托管代码调用非托管的MarshalAs查询
本文关键字:MarshalAs 查询 托管代码 调用 | 更新日期: 2023-09-27 18:14:03
这个问题是这个线程的结果。
我的问题是,为什么我们必须为某些参数指定MarshalAs属性,而不为其他参数指定?我本以为c++和c#数据类型之间的差异会大到需要编译器的方向?
请原谅我的无知,因为我以前从未处理过非托管代码:)
欢呼,亚当
未封送的形参只是整型。整型就是整型,到处都是,原生的还是非原生的。因此,不需要任何特殊的指令来处理它们,值只是通过值传递,并且您都设置好了。
指针和字符串更棘手。c#字符串不一定像C字符串那样表示,C字符串只是指向以空结束的字符数组的指针。内部转换可能是必要的。类似地,数组也需要通过引用传递——并明确地告知这样做。
请记住,在非托管代码中,地址只是数据。它们没什么特别的。所以c#编译器需要知道如何把它所知道的关于变量的所有信息转化为数字。