Неверные значения поля Struct при передаче его из управляемого в собственный код - PullRequest
1 голос
/ 19 августа 2011

У меня есть следующая проблема:

Код C ++:

typedef struct
{
   double x;
   double y;
   double z;
} XYZ;

double Sum(XYZ xyz)
{
  return xyz.x +xyz.y + xyz.z;
}

Код C #:

[StructLayout(LayoutKind.Sequential)]
public class XYZ
{
    public double x;
    public double y;
    public double z;
}
[DllImport("MyUnmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern double Sum([MarshalAs(UnmanagedType.LPStruct)] XYZ xyz);

Когда я запускаю следующую C # main:

XYZ1 xyz1 = new XYZ1 { x = 1f, y = 1f, z = 1f};
var x = MarchingCubesWrapper.Sum(xyz1);

Я вижу, что значения структуры не были переданы в неуправляемую среду. Вот скриншот:

Не могли бы вы сказать, в чем проблема?

1 Ответ

2 голосов
/ 19 августа 2011

Вам нужно объявить XYZ как struct, а не class.Затем следует правильно выполнить маршал.

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