19.11.2020, 17:39
Работа с перенесёнными структурами данных
Если Вы используете структуры данных, которые имеют вероятность быть расширенными Эрой или другими плагинами, то для сохранения совместимости и предотвращения вылетов следует поступать следующим образом:
1) Плагинам, которые расширяют структуры, следует в событиях "OnBeforeWoG" или "OnAfterWoG" вызвать функцию
void __stdcall RedirectMemoryBlock (void* OldAddr, int BlockSize, void* NewAddr);
Укажите старый адрес структуры, старый размер структуры и новый адрес структуры.
2) Плагинам, что используют потенциально расширяемые структуры нужно в событии "OnAfterStructRelocations" сохранить себе новые адреса структур через вызов GetRealAddr:
void* __stdcall *GetRealAddr (void* Addr);
Для подписки на события Эры используйте
void (__stdcall *RegisterHandler (TEventHandler Handler, const char* EventName);
Таким образом Вы обеспечите корректную работу всех других плагинов и новых версий Эры.
Если Вы используете структуры данных, которые имеют вероятность быть расширенными Эрой или другими плагинами, то для сохранения совместимости и предотвращения вылетов следует поступать следующим образом:
1) Плагинам, которые расширяют структуры, следует в событиях "OnBeforeWoG" или "OnAfterWoG" вызвать функцию
void __stdcall RedirectMemoryBlock (void* OldAddr, int BlockSize, void* NewAddr);
Укажите старый адрес структуры, старый размер структуры и новый адрес структуры.
2) Плагинам, что используют потенциально расширяемые структуры нужно в событии "OnAfterStructRelocations" сохранить себе новые адреса структур через вызов GetRealAddr:
void* __stdcall *GetRealAddr (void* Addr);
Для подписки на события Эры используйте
void (__stdcall *RegisterHandler (TEventHandler Handler, const char* EventName);
Code:
struct TEvent
{
char* Name;
void* Data;
int DataSize;
};
typedef void (__stdcall *TEventHandler) (TEvent* Event);
Таким образом Вы обеспечите корректную работу всех других плагинов и новых версий Эры.