feat: add some low level error handling

This commit is contained in:
k0t9i
2023-10-19 10:04:52 +04:00
parent 641e20e82a
commit 2e025fd0cf
9 changed files with 203 additions and 74 deletions

View File

@@ -1,5 +1,8 @@
#include "pch.h"
#include "L2ParamStack.h"
#include "Domain/Exceptions.h"
using namespace L2Bot::Domain;
namespace Interlude
{
@@ -15,50 +18,94 @@ namespace Interlude
L2ParamStack::L2ParamStack(int size)
{
Init();
(*__Ctor)(this, size);
__try {
(*__Ctor)(this, size);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::constructor failed");
}
}
L2ParamStack::~L2ParamStack()
{
Init();
(*__Dtor)(this);
__try {
(*__Dtor)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::desctructor failed");
}
}
int L2ParamStack::PushBack(void* val)
{
Init();
return (*__PushBack)(this, val);
__try {
return (*__PushBack)(this, val);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::PushBack failed");
}
}
void* L2ParamStack::Top()
{
Init();
return (*__Top)(this);
__try {
return (*__Top)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::Top failed");
}
}
void** L2ParamStack::GetBuffer()
{
Init();
return (__GetBuffer)(this);
__try {
return (__GetBuffer)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::GetBuffer failed");
}
}
int L2ParamStack::GetBufferSize()
{
Init();
return (__GetBufferSize)(this);
__try {
return (__GetBufferSize)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::GetBufferSize failed");
}
}
int L2ParamStack::GetTotalBufferSize()
{
Init();
return (__GetTotalBufferSize)(this);
__try {
return (__GetTotalBufferSize)(this);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
throw CriticalRuntimeException(L"L2ParamStack::GetTotalBufferSize failed");
}
}
void L2ParamStack::Init()
{
// todo exceptions
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");