У меня есть следующая структура в 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.