2011-11-11 85 views
0

此问题是this线程的结果。MarshalAs Query Managed Code Calling Unmanaged

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

请原谅我的无知,因为香港专业教育学院从未有过:)

干杯处理非托管代码, 亚当

+0

该声明是错误的,它只适用于因为他传递字符串的空指针。所有[MarshalAs]实际上应该被删除。这是危险。 –

回答

1

未整理的参数仅仅是个整数。 Ints是整数,整数,整数,本地或不。因此,不需要任何特别的指示来处理它们,价值只是通过价值传递,而你们全都定下来了。

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

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

+0

好的,很好。清楚的解释,非常感谢:) –

相关问题