winapi - Lua 字符串不会连接

标签 winapi lua printf lua-alien

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

输出代码摘录如下所示:

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

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 会抛出一个错误,因为你不能连接带有 userdatastring

关于winapi - Lua 字符串不会连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22231827/

相关文章:

file - 如何在 lua 中读取大文件(演出或更多)?

c - 为什么我在c语言中使用任何字符的int变量进行scanf,并使用%d进行printf,它必须显示2?

c - 理解c中的语法难题

c - snprintf() 溢出指定长度

c++ - 使用 CoInitialize 和 CoUninitialize 引发 C++ 异常

c++ - 获取当前光标位置

c - 使用 CreatThread api 创建线程后,控制台上的输出包含问号

随机表 Corona SDK/Lua

lua - HMGET 与 lua-resty-redis 中的数组

c# - 在一个程序中组合 32 位和 64 位 DLL