在 C++ 中定义的以下结构的 C# 等效项是什么

本文关键字:是什么 结构 C++ 定义 | 更新日期: 2023-09-27 17:56:53

我在我的一个项目中定义了以下结构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# 中声明另一个结构中的结构数组及其等效项,如在 SDivision 和 SGroup 中?

更新:

我已经将一些结构转换为 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# 等效项是什么?

在 C++ 中定义的以下结构的 C# 等效项是什么

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