Каким будет C # эквивалент следующей структуры, определенной в C ++ - PullRequest
2 голосов
/ 18 мая 2011

У меня есть следующие структуры, определенные в 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 #?

1 Ответ

0 голосов
/ 31 октября 2011

Наилучший способ действий здесь - иметь C ++ / CLI bridge DLL.Мост C ++ / CLI должен быть построен с той же версией Visual Studio, в которой собрана оригинальная DLL.Результат сборки - обычная библиотека .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...