我正在尝试连接变量以使我的输出“更漂亮”,但是当它与其他字符串值连接时,它似乎输出为空字符串。
输出代码摘录如下所示:
local name = ""
local SendMessage = alien.User32.SendMessageA
SendMessage:types{ret = "int", abi = "stdcall", "pointer", "int", "int", "string"}
SendMessage(handle, LB_GETTEXT, index, name)
print(type(name)) --To verify that it is a string type
print(name) --Prints the name "Sample 1" perfectly fine
print("Title: " .. name .. "\n") --Doesn't print the name variable "Sample 1"
输出:
通过Alien for Lua来自name
的{{3}}来设置User32.dll
变量。我认为这可能是问题的一部分,但是如上所述,变量设置为键入(Lua)“string”并在自身调用时打印正常。但是,每当你将它与任何东西连接起来时,它就像空字符串(或类似的东西)。
编辑:我还尝试了tostring(name)
和alien.tostring(name)
。两者都没有解决问题。
答案 0 :(得分:3)
经过大量的试验和错误以及阅读Lua Alien documentation后,我发现使用Alien Buffer
解决了在混合C-Lua字符串和本机Lua字符串之间进行转换的问题: / p>
local name = alien.buffer()
print("Title: " .. name:tostring() .. "\n")
然后,您可以随时对变量使用tostring()
方法来获取本机Lua字符串。
注意:缓冲区变量的类型为userdata
。如果你试图单独打印它,它会显示它的内容,但是如果你尝试将它连接成一个字符串(没有:tostring()
),Lua将抛出一个错误,因为你无法连接string
与userdata
。