Другое С/С++ Вопрос - Ответ

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Анимация не сбивается, не буду же я врать вам. Может не так беру CPed* локального игрока. Как это делаете вы? Хотя, например, ped->GetHealth() работает.
У меня через PEDSELF->SetPosition(CVector &vector) сделано и мне этого хватает.
 

return

Новичок
82
5
добавляю в proxyIDirect3DDevice9.cpp в renderSAMP после g_renderSAMP_initSAMPstructs
C++:
g_GameInfo = stGetGameInfo();
if (isBadPtr_writeAny(g_GameInfo, sizeof(stGameInfo)))
        return;
Если добавляю в начало - краш.
Если в конец, то работает, но не рендерит clickWarp.

В Чём дело?
 

Gabriel__

Известный
Проверенный
411
181
Хочу взять адрес метода класса и передать в функцию преобразовав в тип long но ошибка. Вроде можно брать адреса только со статических методов а они требуют статические переменные внутри класса. Помогите передать адрес. Вот код
C++:
class HookedWndProc
{
public:
    HookedWndProc(HWND hWnd, WNDPROC WndProc);
    ~HookedWndProc();
private:
    LRESULT CALLBACK m_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

    // data
    HWND m_hWnd;
    WNDPROC m_WndProc;
    WNDPROC m_prevWndProc;
};


HookedWndProc::HookedWndProc(HWND hWnd, WNDPROC WndProc)
{
    m_hWnd = hWnd;
    m_WndProc = WndProc;
    m_prevWndProc = (WNDPROC)SetWindowLongA(m_hWnd, GWL_WNDPROC, /*error C2440: приведение типов*/ (LONG)m_WindowProc);  // Ставим свой Window proc
}

HookedWndProc::~HookedWndProc()
{
    SetWindowLongA(m_hWnd, GWL_WNDPROC, (LONG)m_prevWndProc); // Восстанавливаем прежний Window proc
}

LRESULT HookedWndProc::m_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) /* callback */
{
    CallWindowProcA(this->m_WndProc, hWnd, uMsg, wParam, lParam); // Вызыв пользовательского Window proc
    return CallWindowProcA(this->m_prevWndProc, hWnd, uMsg, wParam, lParam); // Вызов оригинального
}
 

AWRage

Активный
642
141
Хочу взять адрес метода класса и передать в функцию преобразовав в тип long но ошибка. Вроде можно брать адреса только со статических методов а они требуют статические переменные внутри класса. Помогите передать адрес. Вот код
C++:
class HookedWndProc
{
public:
    HookedWndProc(HWND hWnd, WNDPROC WndProc);
    ~HookedWndProc();
private:
    LRESULT CALLBACK m_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

    // data
    HWND m_hWnd;
    WNDPROC m_WndProc;
    WNDPROC m_prevWndProc;
};


HookedWndProc::HookedWndProc(HWND hWnd, WNDPROC WndProc)
{
    m_hWnd = hWnd;
    m_WndProc = WndProc;
    m_prevWndProc = (WNDPROC)SetWindowLongA(m_hWnd, GWL_WNDPROC, /*error C2440: приведение типов*/ (LONG)m_WindowProc);  // Ставим свой Window proc
}

HookedWndProc::~HookedWndProc()
{
    SetWindowLongA(m_hWnd, GWL_WNDPROC, (LONG)m_prevWndProc); // Восстанавливаем прежний Window proc
}

LRESULT HookedWndProc::m_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) /* callback */
{
    CallWindowProcA(this->m_WndProc, hWnd, uMsg, wParam, lParam); // Вызыв пользовательского Window proc
    return CallWindowProcA(this->m_prevWndProc, hWnd, uMsg, wParam, lParam); // Вызов оригинального
}
Нужно что бы функция m_WindowProc была статической.
 

AWRage

Активный
642
141
Да, и из-за этого переменные в private тоже делать статическими ?
Да, только их нужно инициализировать как глобальные. То есть yourClass::mStaticMember = 0; Если ничего не путаю.
Либо просто вынеси m_WindowProc за пределы класса и все.
 

p1cador

cerf
Проверенный
220
359
Пишу по фану простенький платформер. Такой вопрос: как можно спрятать все использующиеся текстуры, звуки, изображения и т.д. в какую-нибудь библиотеку, как это сделано, например, в гта (.txd, .img, .dff)
 
  • Нравится
Реакции: iAmerican и hnnssy