Lua字符串无法连接

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"

输出:

Output

通过调用Alien for Lua中的WINAPI SendMessage函数User32.dll设置name变量。我认为这可能是问题的一部分,但正如上面所示,当单独调用它时,该变量被设置为类型(Lua)“string”,并且打印正确。然而,每当将其与任何内容连接时,它就像空字符串(或类似的东西)。

编辑:我还尝试了tostring(name)alien.tostring(name)。两者都无法解决问题。


你尝试过使用 reallyALuaString = alien.tostring(name) 然后跟着 print("Title: " .. reallyALuaString .. "\n") 吗? - Ray Toal
它崩溃并显示错误信息“期望userdata,但得到了字符串”。 - MrHappyAsthma
1
Lua字符串是不可变的。虽然C API允许将它们转换为const char *,但不允许修改它们的内容。Alien无法打破这个约定,最多只能创建一个全新的Lua字符串来分配给变量,并且它必须知道预先分配一个缓冲区以接收从SendMessage()返回的结果。 - RBerteig
1个回答

3

经过多次尝试和阅读Lua Alien文档,我发现使用Alien Buffer可以解决在混合C-Lua字符串和本地Lua字符串之间转换的问题:

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

随时使用tostring()方法对变量进行操作,以获取本地Lua字符串。

注意:缓冲变量将是userdata类型。如果你尝试仅打印它本身,它会显示其内容,但如果你试图像字符串一样连接它(没有:tostring()),Lua会抛出错误,因为你不能将stringuserdata连接起来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接