我在我的一个项目中使用的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#等价物是什么?
答案 0 :(得分:0)
这里最好的做法是拥有C ++ / CLI桥接DLL。应使用构建原始DLL的相同版本的Visual Studio构建C ++ / CLI桥。构建结果是常规的.NET库。