结构内部结构的元帅安全arrays

我在C ++中有以下代码,我需要能够从C#调用:

struct Inner { double data1; double data2; }; struct Outer { double data3; SAFEARRAY innerData; }; int WINAPI ProcessData (Outer& outer ) { ... } 

我尝试了以下但是它没有用我做错了什么?

 [StructLayoutAttribute(LayoutKind.Sequential)] public struct Inner { public double data1; public double data2; } [StructLayoutAttribute(LayoutKind.Sequential)] public struct Outer { public double data3; [MarshalAsAttribute(UnmanagedType.Safearray,ArraySubType = UnmanagedType.Struct)] public Inner[] innerData; } 

你试过这个吗?

  [StructLayoutAttribute (LayoutKind.Sequential)] public struct Outer { public double data3; [MarshalAsAttribute (UnmanagedType.SafeArray, SafeArrayUserDefinedSubType=typeof(Inner))] public Inner [] innerData; } 

它看起来好像属性声明不正确,因为它拒绝编译…

 [StructLayoutAttribute(LayoutKind.Sequential)]
         public struct Outer
         {
            公共双数据3;
             [MarshalAsAttribute(UnmanagedType.SafeArray,SafeArraySubType = VarEnum.VT_SAFEARRAY)]
             public Inner [] innerData;
         }

希望这会有所帮助,最好的问候,汤姆。

当我尝试这个:[MarshalAsAttribute(UnmanagedType.SafeArray,SafeArrayUserDefinedSubType = typeof(Inner))]

我得到:Driver.exe中发生了’System.ArgumentException’类型的未处理exception

附加信息:参数不正确。 (HRESULTexception:0x80070057(E_INVALIDARG))