我在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));
}
我发现在C++中,KdTrees的值为0,而不是传入的1。
我做错了什么?
编辑1:我在Windows 7 32位上使用Visual Studio 2008。
编辑2:两个sizeof(SnapRoundingOption)
返回相同的数字——16。
struct
中的单词“struct”在哪里啊?那是笔误还是你实际上就是这样写的?! - user541686sizeof(SnapRoundingOption)
并检查它们是否相同。 - user541686