我正在使用swig-lua。我在Lua中調用了一個函數,它返回一個指針(userdata)。現在我知道這個指針是什麼,但是我怎麼能從Lua中告訴Lua?Lua/SWIG從Lua內包裝userdata
0
A
回答
3
setmetatable(表,元表)
設置爲給定的 表元表。 (您不能 元表其他類型的從Lua僅從C.改變, )
你不能「告訴Lua的」什麼是userdata
是在Lua。必須給它一個metatable或通過使用C API的綁定函數調用進行操作。有關更多信息,請參閱chapter 28.1 of Programming in Lua (Pil)。
0
userdata的定義是,Lua沒有,不能,也不想知道它是什麼。這是你的數據 - 它是什麼是你的問題。如果你想操作它,那麼你必須調用它的C函數(操作符可通過metatable設置重載)。
-1
告訴SWIG關於指針void
指向的數據類型。如果SWIG知道這個類型,那麼它會將它作爲一個userdata
傳遞給Lua,並附帶一個適當的元表連接,允許Lua端訪問和修改各個數據字段(如果它是一個類,則調用它的方法) 。
這可能意味着告訴SWIG有關圖書館不需要的某些數據類型,但從長遠來看可能值得付出努力。
所有的Lua都知道它的metatable中包含了一個userdata的類型。兩個userdata
值是相同的類型,如果他們具有相同的metatable。該metatable負責調解所有從Lua端訪問其內容,並且通常由C中實現的方法組成,以便可以做到。如果沒有這樣的mettaable,那麼Lua方面只能將userdata
視爲不透明的blob。
相關問題
- 1. Lua C++ userdata
- 2. Lua userdata gc
- 3. 從純Lua創建新的空userdata
- 4. 在Lua中訪問Light userdata
- 5. Lua的Wireshark解剖器 - userdata
- 6. Lua userdata對象管理
- 7. lua userdata C++析構函數
- 8. lua userdata按值傳遞
- 9. 計算lua中bytearray/userdata的crc16
- 10. Lua userdata數組訪問和方法
- 11. 如何檢查lua中的userdata
- 12. Lua中的userdata和lightuserdata是什麼?
- 13. lua中mableced userdata的__gc方法?
- 14. Lua庫/密碼學包裝
- 15. 在Java中包裝Lua API
- 16. 從C api訪問userdata中的Lua變量
- 17. 從Listener訪問userData
- 18. 包裝內的包裝?
- 19. 如何在Lua代碼中擴展SWIG的userdata?
- 20. Emmet包裝和內部包裝HTML
- 21. npm從另一個回購內包裝?
- 22. 內容對準內包裝
- 23. WebView包裝內容
- 24. ProgressIndicator包裝內容
- 25. Typo3內容包裝
- 26. 將UserData存儲在內存中
- 27. Lua的封裝類
- 28. 的Lua含包的子包
- 29. AS3:從包裝
- 30. 表內表LUA
我不是說Lua應該知道。我知道它不能,但SWIG不能說什麼? – 2010-05-18 15:37:54
SWIG只能執行默認API中可用的操作,它不能重寫源或語言。當lua_touserdata返回一個void *時,除非SWIG使用一個內部的獨立系統來自動處理這個結果並將正確的類型傳遞給你,所有你可以得到的都是void *。 – Puppy 2010-05-18 20:04:00