LuaC 库:某些函数出现访问冲突

我用 Visual Studio 2017 写了一个相对基础的 C++ Lua 模块。它从应用程序中导出函数,然后可以在该应用程序内运行的 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;
}
//上面的函数按预期工作。
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;
}
//上面这个函数和类似它的函数结果是一般性的访问违规或冻结。
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;
}

第一个函数按预期工作而不会崩溃,而接受超过两个参数的那些函数(例如第二个函数)会导致冻结或访问违规。这可能是什么原因呢?

谢谢。

点赞