3

我正在尝试连接一个变量以使我的输出“更漂亮”,但是当它与其他字符串值连接时,它似乎输出为一个空字符串。

输出代码摘录如下所示:

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 函数设置的User32.dll。我认为这可能是问题的一部分,但是正如您在上面看到的,该变量设置为类型(Lua)“字符串”,并且在自行调用时打印正常。但是,无论何时将它与任何东西连接起来,它都会像空字符串(或类似的东西)一样。

编辑: 我也试过tostring(name)and alien.tostring(name)。两者都不能解决问题。

4

1 回答 1

3

经过大量试验和错误以及阅读Lua Alien 文档后,我发现使用 anAlien Buffer解决了混合 C-Lua 字符串和本机 Lua 字符串之间的转换问题:

local name = alien.buffer()
print("Title: " .. name:tostring() .. "\n")

然后,您可以随时使用tostring()该变量上的方法来获取本机 Lua 字符串。

注意: 缓冲区变量的类型为userdata. 如果你尝试自己打印出来,它会显示它的内容,但是如果你尝试像字符串一样连接它(没有:tostring()) Lua 会抛出一个错误,因为你不能连接 astringuserdata

于 2014-03-06T19:01:54.963 回答