feat: add some low level error handling
This commit is contained in:
@@ -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");
|
||||
|
Reference in New Issue
Block a user