当C ++版本需要无参数构造函数时,将简单的C#struct编组到C ++

时间:2015-01-29 09:30:26

标签: c# c++ struct marshalling default-constructor

仅在Windows应用商店项目中使用C ++ dll并在设备上运行时才会出现此问题。与Android或iOS项目一起使用时,它可以正常工作。

我在一些本机c ++代码中有一个结构,如下所示:

struct InteropVector2 {
    float32 x;
    float32 y;

    InteropVector2(float32 x, float32 y) : x(x), y(y) {}

    InteropVector2() {}
};

非常简单,没什么特别的。所以我在C#中创建了另一个结构,以便在需要将此结构从C#传递给C ++时使用:

[StructLayout (LayoutKind.Sequential, Pack = 4)]
public struct InteropVector2
{
    public float x;
    public float y;

    public InteropVector2(float x, float y)
    {
        this.x = x;
        this.y = y;
    }
}

也很简单。但是,当我将它从C#传递给C ++时,x和y值都是0.0,无论我传入的是什么。但是如果我删除C ++结构中的无参数构造函数,它就像魅力一样。我需要在C ++代码中使用无参数构造函数。任何想法我怎么能做到这一点?

以下是这些结构的使用示例:

C ++

EXTERN_DLL_EXPORT bool __stdcall TestMyVector2(InteropVector2 p1) {
    LOG("[C++] Vector2: (%f %f)", p1.x, p1.y);

    return false;
}

C#

[DllImport(pluginName)]
public static extern bool TestMyVector2(InteropVector2 p1);

var = B2D.TestMyVector2(new InteropVector2(1.44f, 2.55f)));

0 个答案:

没有答案