如何编组结构数组 - (.Net/C

免责声明:编组概念接近零..

我有一个结构 B,其中包含一个字符串和结构 C 的数组。我需要将其跨过巨大的互操作鸿沟发送给 COM - C 使用者。
我需要哪些正确的属性集来装饰我的结构定义?

[ComVisible (true)]
[StructLayout(LayoutKind.Sequential)]
public struct A
{
    public string strA
    public B b;
}


[ComVisible (true)]
[StructLayout(LayoutKind.Sequential)]
public struct B
{
    public int Count;

    [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.Struct, SizeParamIndex=0)]
    public C [] c;
}

[ComVisible (true)]
[StructLayout(LayoutKind.Sequential)]
public struct C
{
    public string strVar;
}

编辑:@Andrew 基本上这是我朋友的问题。他让这个东西在 .Net 中工作 - 他做了一些自动魔术来创建 .tlb/.tlh,然后他可以在 C 领域中使用。 问题是他无法修复数组大小。

请先 登录 后评论

1 个回答

Andrew

答案取决于您也尝试编组的本地定义。您没有提供足够的信息让任何人能够真正提供帮助。

在原生数组中编组字符串时,一个常见的问题是原生数组通常使用固定大小的缓冲区来存储与结构内联分配的字符串。您的定义是将字符串编组为指向另一个包含该字符串的内存块的指针(这是默认值)。

[MarshalAs(UnmanagedType.ByValTStr, SizeConst =

请先 登录 后评论