MarshalAs查询与托管代码调用非托管

时间:2011-11-11 03:57:46

标签: c# marshalling managed-code

此问题是this主题的结果。

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

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

干杯, 亚当

1 个答案:

答案 0 :(得分:1)

未编组的参数只是整数。 Int是整数,是整数,无处不在,本机或非本地。因此,不需要任何特殊的指令来处理它们,值只是通过值传递,并且你已经完成了设置。

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

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