Marshal Safearray структуры внутри структуры - PullRequest
4 голосов
/ 10 февраля 2010

У меня есть следующий код в 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;
}

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

Вы пробовали это?

  [StructLayoutAttribute (LayoutKind.Sequential)]
  public struct Outer
  {
     public double data3;
     [MarshalAsAttribute (UnmanagedType.SafeArray, SafeArrayUserDefinedSubType=typeof(Inner))]
     public Inner [] innerData;
  }
0 голосов
/ 10 февраля 2010

Похоже, что объявление атрибута неверно, так как он отказывается компилировать ...

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

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...