Библиотека LuaC: нарушение прав доступа с определенными функциями

Я написал относительно базовый модуль C ++ lua с использованием Visual Studio 2017. Он экспортирует функции из приложения, которые затем можно вызывать из сценария lua, выполняемого в указанном приложении. Похоже, что он работал нормально по большей части, за исключением того факта, что функции с более чем двумя параметрами приводят к нарушению доступа. Ниже приведен упрощенный вариант кода.

#include "lua.hpp"#include "lauxlib.h"#include <Windows.h>
#include <string>
#define LUA_LIB extern "C" __declspec(dllexport) int

typedef void(__fastcall* mod_Object)(void*, std::string*);
static int lua_modObject(lua_State *L) {
DWORD64 object = 0x155E941;
static mod_Object newModObject = (mod_Object)(base + 0x2DF677);
std::string mod = luaL_checkstring(L, 1);
newModObject((LPVOID)object, &mod);
return 0;
}
//The above function works as intended.
typedef void(__fastcall* mod_Multi_Object)(void*, std::string*,std::string*);
static int lua_mod_Multi_Object(lua_State *L) {
DWORD64 object = 0x155E941;
static mod_Multi_Object newModMultiObject = (mod_Multi_Object)(base +0x2DFC45);
std::string moda = luaL_checkstring(L, 1);
std::string modb = luaL_checkstring(L, 2);
newModMultiObject((LPVOID)object, &moda, &modb);
return 0;
}
//This time the above function, and any other function similar to it, results in a generic access violation or freeze.
LUA_LIB _init(lua_State *L) {
base = (DWORD64)GetModuleHandle(NULL);

lua_newtable(L);

lua_pushcfunction(L, &lua_modObject);
lua_setfield(L, -2, "objectMod");

lua_pushcfunction(L, &lua_mod_Multi_Object);
lua_setfield(L, -2, "objectMultiMod");

return 1;
}

Первая функция работает так, как задумано, без сбоев, в то время как те, которые принимают более двух параметров, таких как вторая, приводят либо к зависанию, либо к нарушению доступа. Есть ли какая-то конкретная причина, по которой это может произойти?

Благодарю.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]