使用哪种Marshal :: Copy重载方法?

时间:2013-06-23 18:56:06

标签: c++-cli marshalling

请考虑以下C ++ / CLI代码:

typedef unsigned __int8 uint8_t;
...
uint8_t          unmanaged_buf[MAVLINK_MAX_PACKET_LEN];
array<uint8_t>^  Buffer;
...
Marshal::Copy((IntPtr)unmanaged_buf, Buffer, 0, len);

以下是使用的Marshal :: Copy()方法吗?

Marshal::Copy Method (IntPtr, array<Byte>, Int32, Int32)

PS:上述方法的MSDN网址位于:http://msdn.microsoft.com/en-us/library/ms146631.aspx

如果是,是因为Byte是最接近unsigned __int8的类型吗?具体来说,Visual C ++编译器如何确定使用哪个方法重载?

1 个答案:

答案 0 :(得分:4)

来自MSDN documentation about __int8

  

类型__int8__int16__int32是具有相同大小的ANSI类型的同义词,对于编写跨多个平台的行为相同的可移植代码非常有用。 __int8数据类型与类型char 同义,...

这并没有说明unsigned版本的类型,但我认为假设unsigned __int8unsigned char是同义词是有意义的。

来自.NET Framework Equivalents to C++ Native Types

  

下表显示了内置Visual C ++类型的关键字,它们是System命名空间中预定义类型的别名。

     

unsigned charSystem.Byte

将这些放在一起,unsigned __int8System.Byte的别名同义,这意味着它与C ++ / CLI代码中的System.Byte相同。