什么是C ++中定义的以下结构的C#等价物

时间:2011-05-18 07:51:25

标签: c# c++ dll struct

我在我的一个项目中使用的C ++中定义了以下结构,这些结构将被重新用于Unity引擎的C#脚本中的另一个项目。我希望在dll中使用这些结构类型作为C#脚本和C函数之间的参数类型,但我不知道如何将它们转换为C#声明。

以下是结构定义:

struct SMove
{
    std::string m_MotionID;
    std::string m_AnimSrc;
    float           m_StartFrame;
    float           m_EndFrame;

// features

enum XFEATURE
{
    XFEATURE_NONE = 0,

    // Insert new features
    XFEATURE_ENERGY,            
    XFEATURE_POWERLEVEL,            

};

float           m_Intensity;
};

struct SElement
{
    float           m_Start;
    float           m_End;
};
typedef std::vector<SElement> TElements;

struct SGroup
{
    float           m_Start;
    float           m_End;
    long            m_Level;

    TElements       m_Elements;
};
typedef std::vector<SGroup> TGroups;

struct SDivision
{
    std::string m_PlayerID;
    std::string m_DivisionID;
    float           m_Start;
    float           m_End;

    TGroups     m_Groups;

    // features
    float           m_Intensity;

};
typedef std::vector<SDivision> TDivisions;

typedef std::vector<long*>      TScript;

struct SScriptList
{
    TScript* m_Seg[9][4][2];
};

我刚刚开始学习C#,我知道它只能与C互操作所以所有std :: string和std :: vector必须以某种方式替换为C和C#中识别的东西。我知道std :: string可以替换为const char *但是如何转换其余的?我搜索了许多网站,但找不到任何与我相似的例子。如何在C#中的另一个结构中声明struct的数组,在SDivision和SGroup中声明它的C等价?

更新

我已经将一些结构转换为C,如下所示:

struct SElement
{
    float           m_Start;
    float           m_End;
};

struct SGroup
{
    float           m_Start;
    float           m_End;
    long            m_Level;

    //Array of Elements     
    SElement*       m_pElements;
    int             m_numElements;
};

struct SDivision    {
    const char*     m_PlayerID;
    const char*     m_DivisionID;
    float           m_Start;
    float           m_End;

    //Array of Groups
    SGroup*     m_pGroups;
    int             m_numGroups;

    float           m_Intensity;
};

C#等价物是什么?

1 个答案:

答案 0 :(得分:0)

这里最好的做法是拥有C ++ / CLI桥接DLL。应使用构建原始DLL的相同版本的Visual Studio构建C ++ / CLI桥。构建结果是常规的.NET库。