c++ - 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;
}
//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;
}
第一个函数按预期工作而不会崩溃,而接受两个以上参数的函数(例如第二个)会导致冻结或访问冲突。为什么会发生这种情况有什么特别的原因吗?
谢谢。
解决方案
推荐阅读
- c# - 需要有关 SendKeys 的帮助
- java - 范围报告 - 折叠父节点以看不到子节点
- python - 用函数处理文件?
- css - 您可以将 sass 正则表达式选择器应用于样式值吗?
- sql - 用过滤值查询同一张表
- neo4j - Neo4j apoc.path.subgraphAll 返回过滤掉的关系
- javascript - 清除后如何继续setinterval功能
- c - 使用线程写入文件(WINAPI)
- javascript - 如何在最小值、最大值上使用小数百分比格式化 Google Chart Gauge?
- dropbox - Dropbox API - 创建文件夹时添加文件夹概览