小编Ste*_*eve的帖子

从lua.file中为5.2/Set Envirenment中的函数提供沙箱嵌入式Lua

可以说我至少有两个lua脚本文件.

test1.lua test2.lua

两者都定义了一个init函数和其他具有相似名称的函数.

如何使用c ++/c将每个脚本文件加载到使用Lua 5.2的单独环境中,以便相同的函数名称不会发生冲突 - 我发现5.1的示例代码对我不起作用(因为setenv已经消失而lua_setuservalue没有似乎工作)

这里的示例从.lua使用句柄调用lua函数?

基本上如果我用setuservalue替换setenv - 我得到访问冲突.

lua

7
推荐指数
1
解决办法
3275
查看次数

CMake make install 失败并显示“文件安装找不到 <myfile>”

我有以下项目结构

MyProject
CMakeLists.txt
\SubProject1
\SubProject1\CMakeLists.txt
\SubProject2
\SubProject2\CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

编译二进制文件工作正常,我只是使用ADD_SUBDIRECTORY(SubProject1)等。

每个子项目的配置基本上是SET(EXECUTABLE_OUTPUT_PATH ../Bin)

因此,我从 MyProject Dir 创建一个 Build dir

mkdir Build
cd Build
cmake ..
make install
Run Code Online (Sandbox Code Playgroud)

我的二进制文件现在位于MyProject/Build/Bin/binaryname

但安装目标失败

当我尝试使用cmakeDEB 安装程序时

INSTALL(FILES Bin/binaryname DESTINATION /opt/myproject/bin)
Run Code Online (Sandbox Code Playgroud)

它失败了,因为cmake搜索我的项目的根目录中的路径(由于我cmake ..最有可能使用)

所以cmake尝试使用MyProject/Bin/binaryname

Bin/binaryname而不是在当前工作目录中查找

我该如何解决?../Bin/binary等不起作用 - 我不想硬编码Build/Bin/binary-cmake因为要构建的目录基本上可以自由选择

编辑:这是一个精简的 SubProject1CMakeList.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
file(GLOB_RECURSE SOURCES "Source/*.cpp")
INCLUDE_DIRECTORIES("Include")
get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
ADD_EXECUTABLE(mybinary ${SOURCES})

IF(UNIX)
ADD_DEFINITIONS(-fPIC)
ENDIF(UNIX)
Run Code Online (Sandbox Code Playgroud)

cmake

7
推荐指数
1
解决办法
2万
查看次数

Detours Hook在外部进程中为"空"功能不起作用

我通过它们的函数偏移在外部进程中挂钩函数.这对于我到目前为止挂钩的函数效果很好 - 但是我发现了一个"debugLog(char ...)"函数,它仍然存在于二进制文件中但没有进行任何打印 - 它看起来像这样

debugMessage    proc near               ; 
            xor     eax, eax        ; Logical Exclusive OR
            retn                    ; Return Near from Procedure
debugMessage    endp
Run Code Online (Sandbox Code Playgroud)

它被称为这样

push    offset debugString ; "This is a debug message"...
call    debugMessage    ; Call Procedure
Run Code Online (Sandbox Code Playgroud)

现在调试消息显然已被禁用,我想挂钩到这个,因为我能够简单地挂钩到二进制文件中的类似func(char ..).

这是代码:

typedef void (__stdcall* DebugLog)(const char*);
DebugLog Real_DebugLog = (DebugLog)(0xCAFEBABE);

extern "C"
 {
 static void __stdcall Hook_DebugLog(const char*);
 }

void __stdcall Hook_DebugLog(const char* text) {
MessageBox(NULL, text, "MyDebugLog", MB_OK);
return Real_DebugLog(text);
}

// in dll main attach..
DetourTransactionBegin(); …
Run Code Online (Sandbox Code Playgroud)

c++ assembly detours

6
推荐指数
1
解决办法
1148
查看次数

为什么Lua禁止转到本地var定义?

我从手册http://lua-users.org/wiki/GotoStatement中读到了这一点

我在循环中有一个类似的代码块:

while true do
  if someCond == nil then
      goto f  -- invalid (forward jump into scope of local definition)
  end

  local x = 1
   -- do something with x
  ::f::
end
Run Code Online (Sandbox Code Playgroud)

这将失败,"......跳进本地x的范围"

但为什么?如果在使用本地x之后执行跳转 - 它不再被触及 - 因此这里不再需要"本地x"

当我用x = 1(全局制作)切换局部x时,它工作正常.

这是一种缺失的疏忽或优化吗?例如,他们可能总是假设跳转到标签后可以使用局部变量

lua

6
推荐指数
1
解决办法
1310
查看次数

使用lua_newthread在C++中等效Lua coroutine.create

我有一个回调系统,它可以将lua函数添加到C++处理程序,例如我可以做的lua

myCObject:AddCallback(luaFunc)
Run Code Online (Sandbox Code Playgroud)

对于协程,我也有相同的

myCObject:AddCallback(coroutine.create(luaFunc))
Run Code Online (Sandbox Code Playgroud)

然后我可以使用

lua_State * pThread = lua_tothread(L, -1);
lua_resume(pThread, 0,0);
Run Code Online (Sandbox Code Playgroud)

在C++中

启动/恢复lua功能.

现在,我不想要脚本编写者写coroutine.create(luaFunc) - 我只是想自动"转换"一个lua func到一个协程.当调用AddCallback时,我在堆栈上有luaFunc - 然后我该如何继续?(使用coroutine.create我已经在堆栈上有一个线程)

编辑:我正在寻找使用C API的解决方案,例如lua_newthread

c++ lua

3
推荐指数
1
解决办法
3490
查看次数

使用antlr解析特定函数中的lua IF语句

我在java中使用带有antlr的Lua.g语法生成了一个Lua Parser.

我希望解析的我的lua代码基本上是这样的

function uniqueid_some_event (e) 
 if (e:HasString("string1")) then  
   -- do something
 end
 if (e:HasString("string2")) then  
  -- do something
 end
end
Run Code Online (Sandbox Code Playgroud)

我在不同的文件中有数百个这些事件用于特定的actor绑定.

现在我想解析这些文件并收集每个检查条件 - 在上面的例子中 - 我想提取"string1"和"string2"作为事件触发器.(更确切地说,我想创建一个只显示每个文件的触发器的报告)

我收集我需要以某种方式修改Lua.g以在那里添加我自己的逻辑,但我失去了因为我没有找到任何关于此的文档 - 我看了LuaEclise基本上做了一些事情,但它也不适用于我.

那么 - 是否可以向生成的LuaParser添加某种w3c DOM返回值?或者像getFunctions()这样的东西返回找到的所有函数,并在每个函数getHasStringStatements()中返回条件?

java lua antlr

2
推荐指数
1
解决办法
1451
查看次数

标签 统计

lua ×4

c++ ×2

antlr ×1

assembly ×1

cmake ×1

detours ×1

java ×1