在.net上的CTS上感到困惑

时间:2010-01-28 12:17:06

标签: c# .net

CTS执行所有必需的数据类型转换,以便通过.net执行代码。那么为什么当我们尝试实现指针时,它不是由它映射而是我们必须显式转换代码?

1 个答案:

答案 0 :(得分:1)

我假设你的意思是普通类型系统。 CLR有一个非常强大的互操作引擎,称为P / Invoke marshaller。将'C'字符串转换为System.String没有问题,它是[DllImport]和[MarshalAs]属性自动完成的。并非所有可能的“C”函数签名或结构声明都是兼容的,您可能偶尔需要使用Marshal类来编组IntPtr。最好的办法是提供一个这样一个麻烦的功能的例子。

请注意,如果您使用String ^,那么您可能正在使用C ++ / CLI编写代码。然后,您将使用C ++ Interop与传统的非托管代码互操作。 [DllImport]当然仍然有效,但在C ++ / CLI中并不常用。 C ++ Interop非常强大,比P / Invoke marshaller更强大。但是,由于功耗是一个代价,你必须自己记录char *和Unicode字符串之间的完全不兼容性。使用marshal_as<>并不是特别困难。模板类。