2014-03-06 68 views
3

我想連接一個變量,使我的輸出「漂亮」,但它似乎輸出爲與其他字符串值連接時的空字符串。Lua字符串將不會連接

輸出代碼摘錄如下:

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呼叫從User32.dll設置爲WINAPI SendMessage function。我認爲這可能是問題的一部分,但正如你在上面看到的那樣,變量被設置爲鍵入(Lua)「string」,並在被自己調用時打印正確。但是,無論何時將它與任何東西連接起來,它都像空字符串(或類似的東西)一樣。

編輯:我也試過tostring(name)alien.tostring(name)。這兩者都不能解決問題。

+0

您是否嘗試過'reallyualuatring = alien.tostring(name)'後跟'print(「標題:」.. reallyALuaString ..「\ n」)'? –

+0

它崩潰,錯誤「預期的用戶數據,得到的字符串」。 – MrHappyAsthma

+1

Lua字符串是不可變的。雖然C API允許它們轉換爲const char *,但不允許修改它們的內容。外星人不能破壞該合約,最好它可以創建一個全新的Lua字符串來分配給變量,並且必須知道預先分配一個緩衝區以接收來自'SendMessage()'的結果。 – RBerteig

回答

3

大量的試驗和錯誤之後,以及閱讀Lua Alien documentation,我發現,使用Alien Buffer解決了混合動力C-Lua的字符串和一個原生的Lua字符串之間轉換的問題:

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

你可以隨時在變量上使用tostring()方法來獲取本地Lua字符串。

注意:緩衝區變量將是userdata類型。如果你嘗試自己打印出來,它會顯示它的內容,但是如果你試圖像串連接它(沒有:tostring()),Lua會拋出一個錯誤,因爲你不能連接stringuserdata