我正在尝试连接一个变量以使我的输出“更漂亮”,但是当与其他字符串值连接时它似乎输出为空字符串。
输出代码摘录如下所示:
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"
输出:
name
变量是通过 Alien for Lua 设置的调用 WINAPI SendMessage function来自 User32.dll
。我认为这可能是问题的一部分,但是正如您在上面看到的那样,该变量设置为类型 (Lua)“string”,并且在其自身调用时打印正常。但是,无论何时将它与任何内容连接起来,它的作用都像空字符串(或类似的东西)。
编辑: 我也尝试过 tostring(name)
和 alien.tostring(name)
。两者都不能解决问题。
最佳答案
经过大量试验和错误以及阅读 Lua Alien documentation ,我发现使用 Alien Buffer
解决了混合 C-Lua 字符串和原生 Lua 字符串之间的转换问题:
local name = alien.buffer()
print("Title: " .. name:tostring() .. "\n")
然后您可以随时对变量使用 tostring()
方法来获取原生 Lua 字符串。
注意:缓冲区变量的类型为userdata
。如果你试图自己打印出来,它会显示它的内容,但是如果你试图像字符串一样连接它(没有 :tostring()
)Lua 会抛出一个错误,因为你不能连接带有 userdata
的 string
。
关于winapi - Lua 字符串不会连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22231827/