У меня есть следующие структуры, определенные в C ++, используемые в одном из моих проектов, которые должны быть повторно использованы для другого проекта в скрипте C # движка Unity. Я хочу использовать эти типы структур в качестве типов аргументов между сценарием C # и функциями C в dll, но я не знаю, как преобразовать их в объявление 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 *, но как мне преобразовать остальные? Я погуглил много сайтов, но не смог найти примеров, похожих на мой. Как мне объявить массивы struct внутри другой структуры в C # и ее эквивалент 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 #?