Доступ к основным параметрам строки в C# из C ++ dll - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь получить доступ к параметрам системы координат из DLL C ++ в мой C# проект. Объявление функции в C ++ выглядит следующим образом:

unsigned int GetUCS(IUnknown* document, unsigned int id, double (&frame)[16]);

Мне нужна помощь с параметром кадра, который является строкой-мажором:

  [Right_x, Up_x, Forward_x, Translation_x]
  [Right_y, Up_y, Forward_y, Translation_y]
  [Right_z, Up_z, Forward_z, Translation_z]
  [0,       0,    0,         1            ]

В моем проекте C# я должен иметь что-то вроде:

  [DllImport("my.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)] 
  private static extern uint GetUCS([MarshalAs(UnmanagedType.IUnknown)] object document, uint id, double(frame)?));

, чтобы получить кадр и сделать несколько трехмерных преобразований на его основе. Спасибо!

1 Ответ

0 голосов
/ 25 февраля 2020

Я думаю, что я бы использовал C# многомерный массив, подобный этому:

[DllImport("my.dll", CallingConvention = CallingConvention.Cdecl)] 
private static extern uint GetUCS(
    [MarshalAs(UnmanagedType.IUnknown)] object document, 
    uint id, 
    [In, Out] double[,] frame
);

Вы бы разместили массив в своем C# коде так:

double[,] frame = new double[4, 4];

Вы также можете использовать double[] frame, выделенный как new double[16], что в буквальном смысле соответствует коду C ++, но тогда вы потеряете возможность естественного доступа к матрице в вашем C# коде.

...