0

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

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

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

干杯,亚当

4

1 回答 1

1

未编组的参数只是整数。整数是整数是整数是整数,无处不在,无论是否原生。所以不需要任何特殊的指令来处理它们,值只是按值传递,你就设置好了。

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

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

于 2011-11-11T04:04:49.233 回答