Передача структуры из C # в C ++

У меня есть следующая структура в C ++:

extern "C" __declspec(dllexport) struct SnapRoundingOption
{
    double PixelSize;
    bool IsISR;
    bool IsOutputInteger;
    int KdTrees;
};

А это объявление моей функции в C ++:

extern "C" __declspec(dllexport) void FaceGenerationDummy(SnapRoundingOption snapOption);

Это соответствующий код C #:

// I also tried not specifying Pack, but the same error occurred.
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct SnapRoundingOption
{
    public  double PixelSize;
    public bool IsISR;
    public bool IsOutputInteger;
    public int KdTrees;

    public SnapRoundingOption(double pixelSize, bool isISR, bool isOutputInt, int kdTrees)
    {
        PixelSize = pixelSize;
        IsISR = isISR;
        IsOutputInteger = isOutputInt;
        KdTrees = kdTrees;
    }
}

[DllImport("Face.dll")]
public static extern void FaceGenerationDummy(SnapRoundingOption snapRoundingOption);

Однако, когда я вызываю FaceGenerationDummy с этим тестом:

[Test]
public void DummyTest()
{
    SimpleInterop.FaceGenerationDummy(new SnapRoundingOption(10, true, false, 1));
}

Я обнаружил, что KdTrees имеет значение 0 в C ++ вместо 1, как передано.

Что я делаю не так?

Редактировать 1: Я использую Visual Studio 2008 в 32-разрядной версии Windows 7.

Редактировать 2: Оба sizeof (SnapRoundingOption) возвращают одно и то же число - 16.

9
задан tambre 18 June 2018 в 13:07
поделиться