C ++ - необъявленный идентификатор / слева от 'FUNCTION' должен иметь класс / struct / union - PullRequest
0 голосов
/ 13 июня 2018

Я искал весь день об этом, но, похоже, ни один из ответов не помог мне исправить ошибки ...

В настоящее время я делаю DLL на C ++, которая перехватывает EndScene игры,и получает viewmatrix и переводит на экран ... Весь код в порядке, но кажется, что какая-то переменная все портит ...

Я получаю эти ошибки

Ошибка 1: «LocalPlayer»: необъявленный идентификатор

Ошибка 2: слева от «.flMatrix» должен быть класс / struct / union

Ошибка 3: слева от «.WorldToScreenMatrix» должен быть класс/ struct / union

Вот функция WorldToScreen:

    bool WorldToScreen(float * from, float * to)
{
    HWND atual = GetActiveWindow();
    RECT m_Rect;
    GetWindowRect(atual, &m_Rect);

    float w = 0.0f;

    to[0] = LocalPlayer.WorldToScreenMatrix.flMatrix[0][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][3];
    to[1] = LocalPlayer.WorldToScreenMatrix.flMatrix[1][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][3];
    w = LocalPlayer.WorldToScreenMatrix.flMatrix[3][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][3];

    if (w < 0.01f)
        return false;

    float invw = 1.0f / w;
    to[0] *= invw;
    to[1] *= invw;

    int width = (int)(m_Rect.right - m_Rect.left);
    int height = (int)(m_Rect.bottom - m_Rect.top);

    float x = width / 2;
    float y = height / 2;

    x += 0.5 * to[0] * width + 0.5;
    y -= 0.5 * to[1] * height + 0.5;

    to[0] = x + m_Rect.left;
    to[1] = y + m_Rect.top;

    return true;
}

Ошибка в следующих строках:

to[0] = LocalPlayer.WorldToScreenMatrix.flMatrix[0][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][3];
    to[1] = LocalPlayer.WorldToScreenMatrix.flMatrix[1][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][3];
    w = LocalPlayer.WorldToScreenMatrix.flMatrix[3][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][3];

Структура LocalPlayer:

struct LocalPlayer
{
    DWORD Local;
    int Team;
    int Health;
    WorldToScreenMatrix_t WorldToScreenMatrix;
    float* Position;
    int Flags;
    int CrossHair;
    void Read()
    {
        Local = *(DWORD*)(dwClient + dwLocalPlayer);
        if (Local != NULL)
        {
            Team = *(int*)(Local + dwTeam);
            Position = (float*)(Local + dwOrigin);
            Health = *(int*)(Local + dwHealth);
            CrossHair = *(int*)(Local + dwCrossHairID);
            WorldToScreenMatrix = *(WorldToScreenMatrix_t*)(dwEngine + dw_vMatrix);
        }
    }
}LocalPlayer;

flmatrix включен:

typedef struct
{
    float flMatrix[4][4];
}WorldToScreenMatrix_t;

Где возникает ошибка?

...