从c#获取本机类型大小

时间:2015-10-19 15:20:41

标签: c# c++ swig

我使用swig将一些c ++类包装到c#中。
有一些方法可以将类型的大小作为参数(任何类型都可以作为参数传递)。
我的问题是如何用c#代码获取c ++对象的大小?

2 个答案:

答案 0 :(得分:0)

在运行时无法获得本机类型的大小 - 没有类型信息。

您可能希望从原生方面传递大小,可以静态确定。只需在对象或其他内容中添加getSize方法即可。

答案 1 :(得分:0)

与C ++不同,在.NET中获取对象的大小始终是运行时操作。 Marshal.SizeOf调用不会像C ++的sizeof运算符那样被转换为编译时常量。在运行时,.NET需要一个可以反映的.NET对象,并且必须使用StructLayout等属性正确定义该对象。

所以你有两个选择:

  1. 定义C ++对象的.NET版本并使用Marshal.SizeOf。您不需要使用.NET对象。它只是让你确定大小。当然,如果你搞砸了那个对象,或者因为进化而导致它们不同步,你就会度过一段美好的时光。
  2. 从只返回sizeof(MyCppObject)的C ++中公开一个新方法。这可能是更好的解决方案。