我使用swig将一些c ++类包装到c#中。
有一些方法可以将类型的大小作为参数(任何类型都可以作为参数传递)。
我的问题是如何用c#代码获取c ++对象的大小?
答案 0 :(得分:0)
在运行时无法获得本机类型的大小 - 没有类型信息。
您可能希望从原生方面传递大小,可以静态确定。只需在对象或其他内容中添加getSize
方法即可。
答案 1 :(得分:0)
与C ++不同,在.NET中获取对象的大小始终是运行时操作。 Marshal.SizeOf
调用不会像C ++的sizeof
运算符那样被转换为编译时常量。在运行时,.NET需要一个可以反映的.NET对象,并且必须使用StructLayout
等属性正确定义该对象。
所以你有两个选择:
Marshal.SizeOf
。您不需要使用.NET对象。它只是让你确定大小。当然,如果你搞砸了那个对象,或者因为进化而导致它们不同步,你就会度过一段美好的时光。sizeof(MyCppObject)
的C ++中公开一个新方法。这可能是更好的解决方案。