L2Bot2.0/L2BotDll/Versions/Interlude/GameStructs/L2ParamStack.cpp
2023-10-19 10:04:52 +04:00

118 lines
2.9 KiB
C++

#include "pch.h"
#include "L2ParamStack.h"
#include "Domain/Exceptions.h"
using namespace L2Bot::Domain;
namespace Interlude
{
void(__thiscall* L2ParamStack::__Ctor)(L2ParamStack* This, int) = 0;
void(__thiscall* L2ParamStack::__Dtor)(L2ParamStack* This) = 0;
int(__thiscall* L2ParamStack::__PushBack)(L2ParamStack* This, void*) = 0;
void* (__thiscall* L2ParamStack::__Top)(L2ParamStack* This) = 0;
void** (__thiscall* L2ParamStack::__GetBuffer)(L2ParamStack* This) = 0;
int (__thiscall* L2ParamStack::__GetBufferSize)(L2ParamStack* This) = 0;
int (__thiscall* L2ParamStack::__GetTotalBufferSize)(L2ParamStack* This) = 0;
HMODULE L2ParamStack::_hModule = 0;
L2ParamStack::L2ParamStack(int size)
{
Init();
__try {
(*__Ctor)(this, size);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::constructor failed");
}
}
L2ParamStack::~L2ParamStack()
{
Init();
__try {
(*__Dtor)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::desctructor failed");
}
}
int L2ParamStack::PushBack(void* val)
{
Init();
__try {
return (*__PushBack)(this, val);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::PushBack failed");
}
}
void* L2ParamStack::Top()
{
Init();
__try {
return (*__Top)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::Top failed");
}
}
void** L2ParamStack::GetBuffer()
{
Init();
__try {
return (__GetBuffer)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::GetBuffer failed");
}
}
int L2ParamStack::GetBufferSize()
{
Init();
__try {
return (__GetBufferSize)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::GetBufferSize failed");
}
}
int L2ParamStack::GetTotalBufferSize()
{
Init();
__try {
return (__GetTotalBufferSize)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::GetTotalBufferSize failed");
}
}
void L2ParamStack::Init()
{
if (_hModule == 0) {
_hModule = GetModuleHandleA("Core.dll");
if (!_hModule) {
throw CriticalRuntimeException(L"cannot load Core.dll");
}
(FARPROC&)__Ctor = GetProcAddress(_hModule, "??0L2ParamStack@@QAE@H@Z");
(FARPROC&)__Dtor = GetProcAddress(_hModule, "??1L2ParamStack@@QAE@XZ");
(FARPROC&)__PushBack = GetProcAddress(_hModule, "?PushBack@L2ParamStack@@QAEHPAX@Z");
(FARPROC&)__Top = GetProcAddress(_hModule, "?Top@L2ParamStack@@QAEPAXXZ");
(FARPROC&)__GetBuffer = GetProcAddress(_hModule, "?GetBuffer@L2ParamStack@@QAEPAPAXXZ");
(FARPROC&)__GetBufferSize = GetProcAddress(_hModule, "?GetBufferSize@L2ParamStack@@QAEHXZ");
(FARPROC&)__GetTotalBufferSize = GetProcAddress(_hModule, "?GetTotalBufferSize@L2ParamStack@@QAEHXZ");
}
}
}