1

プログラム内にある関数を DLL から呼び出そうとしています。

プログラムはクローズド ソースですが、構造はわかっています。

次のような「GetPlayerPosition」という関数を呼び出す必要があります。

// native GetPlayerPos(playerid, &Float:x, &Float:y, &Float:z)
static cell AMX_NATIVE_CALL n_GetPlayerPos(AMX *amx, cell *params)
{
    CHECK_PARAMS(4);

    CPlayer* pPlayer = pNetGame->GetPlayerPool()->GetAt((BYTE)params[1]);

    if (pPlayer)
    {
        cell* cptr;
        amx_GetAddr(amx, params[2], &cptr);
        *cptr = amx_ftoc(pPlayer->m_vecPos.X);
        amx_GetAddr(amx, params[3], &cptr);
        *cptr = amx_ftoc(pPlayer->m_vecPos.Y);
        amx_GetAddr(amx, params[4], &cptr);
        *cptr = amx_ftoc(pPlayer->m_vecPos.Z);

        return 1;
    } else {
        return 0;
    }
}

DLL/SO からこの部分を呼び出したい:

pNetGame->GetPlayerPool()->GetAt((BYTE)<my own input data here>);

私は構造/クラスがこれであることを知っています:

typedef struct _VECTOR {
    float X,Y,Z;
} VECTOR, *PVECTOR;

CNetGame    *pNetGame   = NULL;

class CNetGame
{
private:
    CPlayerPool                 *m_pPlayerPool;
public:
    CNetGame();
    ~CNetGame();
    CPlayerPool * GetPlayerPool() { return m_pPlayerPool; };
};

void CNetGame::Init(BOOL bFirst = false)
{
    // Setup player pool
    if(!m_pPlayerPool) {
        m_pPlayerPool = new CPlayerPool();
    } else {
        m_pPlayerPool->ResetPlayerScoresAndMoney();
    }
}

class CPlayerPool
{
private:

    BOOL    m_bPlayerSlotState[MAX_PLAYERS];
    CPlayer *m_pPlayers[MAX_PLAYERS];

public:

    CPlayerPool();
    ~CPlayerPool();

    BOOL New(BYTE bytePlayerID, PCHAR szPlayerName);
    BOOL Delete(BYTE bytePlayerID, BYTE byteReason);

    // Retrieve a player
    CPlayer* GetAt(BYTE bytePlayerID) {
        if (bytePlayerID >= MAX_PLAYERS) { return NULL; }
        return m_pPlayers[bytePlayerID];
    };
};

class CPlayer
{
private:
    BYTE                    m_bytePlayerID;

public:

    CPlayer();
    ~CPlayer() {};

    VECTOR  m_vecPos;

};

pNetGame->GetPlayerPool()->GetAt((BYTE)<my own input data here>);では、この設定でどのように呼び出すのでしょうか?

4

0 に答える 0