在 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++/CLI 桥接 DLL。C++/CLI 桥应使用构建原始 DLL 的相同版本的 Visual Studio 构建。生成结果是常规的 .NET 库。