2
我在我的項目中使用了C++中定義的以下結構體,這些結構體將被重新用於Unity引擎的C#腳本中的另一個項目。我希望將這些結構類型用作C#腳本和dll中C函數之間的參數類型,但我不知道如何將它們轉換爲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 ::載體必須是莫名其妙的東西替換在C和C#中都可以識別。我知道std :: string可以用const char *替換,但是我怎麼去轉換其餘的?我搜索了很多網站,但找不到類似於我的任何示例。我如何在C#中的另一個結構中聲明結構數組,以及在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#是什麼?
你想要什麼?你是否希望C#等價於結構,即有效的C#代碼?或者你想要有效的C或C++代碼,可以在P/Invoke中用於C#。這是兩件完全不同的事情! – 2011-05-18 07:57:36
我想使用這些結構作爲從C DLL插件爲Unity C#腳本導入的函數的參數。我認爲這意味着我需要在腳本中的有效C#代碼和DLL項目中的等效C結構,但我不太確定,但是... – fisyher 2011-05-18 08:03:52
您在結構中使用STL容器,沒有簡單的方法將它們編組到C#碼。你可能想用c數組替換它們。除此之外,一切都將變得簡單。 – Nekuromento 2011-05-18 08:06:58