总的来说.net 调用c++方式就几种,要么传地址指针要么传对应结构类型
在传递那种方式都是要分配足够大小的空间(有些需要等大小的空间)托管到非托管代码中调用,或者直接再托管内存中分配对应大小类型直接传递。
在传递结构体的时候有自带格式,其中Sequential是顺序排列,还有个精确位置排列适用于共联体;pack值是指:类或结构的数据字段在内存中的对齐方式。用默认的不填写则按该结构体内最大字节数作为排列空间的参考大小(一般用默认即可)。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 0)]
在传递共联体的时候就用到[StructLayoutAttribute(LayoutKind.Explicit)]的Explicit精确定位,当然要配套使用 [FieldOffsetAttribute(0)]这个属性,用来存放数据在内存中的相对位置。
另外,在结构体中调用接口对应的内嵌结构体可以不需要new一个,结构体作为值类型不用实例化,即可食用,然后再入参和出参上面名称要一至。其它ok