从c#中获取原生类型大小

get native type size from c#

本文关键字:类型 原生 获取      更新时间:2023-10-16

我用swig包装了一些c++类到c#。
有一些方法将类型的大小作为参数(任何类型都可以作为参数传递)。
我的问题是我怎么能得到c++对象的大小与我的c#代码?

与c++不同,在。net中获取对象的大小总是一个运行时操作。Marshal.SizeOf调用不像c++的sizeof操作符那样被转换成编译时常量。在运行时,。net将需要一个。net对象,它可以反射,并且该对象必须使用StructLayout等属性正确定义。

你有两个选择:

    定义一个。net版本的c++对象并使用Marshal.SizeOf。您不需要使用。net对象来做任何事情。它只是让你确定大小。当然,如果你搞砸了那个对象,或者如果它们因为进化而不同步,你就会有不好的时候。从c++中公开一个只返回sizeof(MyCppObject)的新方法。这可能是更好的解决方案。

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

您可能希望从本机端传递大小,它可以静态地确定。只需添加一个getSize方法到您的对象或其他东西。