Как передать struct с 2-мерным целым числом и двойным массивом из C# в C++ DLL
Привет,
У меня есть VC++ dll, имеющая нижеприведенную структуру
значение структуры
{
инт RunInchMm;
инт transform_order;
инт rotation_ang;
int rotation_org[2][2];
инт mirror_xchg_code;
инт absincmode;
двойной WCS [6][4];
};
Я использую эту структуру в качестве параметра для моей функции VC++ dll, где я читаю все значения из структуры.
Я вызываю эту Dll и ее функцию из приложения c# и передаю значения в структуру из приложения C#, но я не получаю правильных значений для массивов в dll (но для целых чисел я получаю правильные значения) .
Я не знаю, почему это так?
Моя структура из C# выглядит следующим образом-
[StructLayout(LayoutKind.Последовательный)]
значение публичной структуры
{
[Помощью Атрибута Marshalas(Unmanagedtype Значение.И4)]
public int RunInchMm;
[Помощью Атрибута Marshalas(Unmanagedtype Значение.И4)]
общественная int transform_order;
[Помощью Атрибута Marshalas(Unmanagedtype Значение.И4)]
общественная int rotation_ang;
[Помощью Атрибута Marshalas(Unmanagedtype Значение.ByValArray)]
public int [,] rotation_org;
[Помощью Атрибута Marshalas(Unmanagedtype Значение.И4)]
общественная int mirror_xchg_code;
[Помощью Атрибута Marshalas(Unmanagedtype Значение.И4)]
public int absincmode;
[Помощью Атрибута Marshalas(Unmanagedtype Значение.ByValArray)]
общественные двойной[,] туалетами;
}
Я использую dll в C# как-
[DllImport("Convert.dll")]
публичный статический модификатор extern int и ConvertFunc(инт prognum, Реф значение WincncVal, строки имя_проекта, инт fromrunormdi);
// Создать объект структуры
Value WincncVal = новое значение();
WincncVal.rotation_org = новый интервал[2, 2];
Винкнквал.WCS =новый двойной [6,4];
Винкнквал.RunInchMm = 5;
WincncVal.transform_order = 10;
WincncVal.rotation_ang = 12;
WincncVal. rotation_org[0, 0] = 2;
WincncVal.rotation_org[0, 1] = 3;
WincncVal.mirror_xchg_code = 6;
WincncVal.absincmode = 4;
for (int i = 0; i < 6; i++)
for (int j = 0; j < 4; j++)
Винкнквал.WCS[i, j] = 1.1;
ConvertFunc(9999, ref WincncVal, "eWinCNC", 0);
Я много гуглил, но не получал правильного решения.
Пожалуйста, помогите мне.
Спасибо....
Что я уже пробовал:
Я попытался использовать указатели, но безуспешно.