我正在使用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 userdata gc
- 2. Lua C++ userdata
- 3. Lua的Wireshark解剖器 - userdata
- 4. lua userdata C++析構函數
- 5. 在Lua中訪問Light userdata
- 6. lua userdata按值傳遞
- 7. 計算lua中bytearray/userdata的crc16
- 8. 如何檢查lua中的userdata
- 9. Lua中的userdata和lightuserdata是什麼?
- 10. Lua庫/密碼學包裝
- 11. 在Java中包裝Lua API
- 12. 從Listener訪問userData
- 13. 內容對準內包裝
- 14. ProgressIndicator包裝內容
- 15. WebView包裝內容
- 16. Typo3內容包裝
- 17. 將UserData存儲在內存中
- 18. 的Lua含包的子包
- 19. 從Lua enivronment內部找到Lua程序的入口點
- 20. 從Lua到Lua的Lua嵌套表
- 21. ?從LUA
- 22. 從Lua
- 23. userData的CCNode的
- 24. array_walk params userdata modified
- 25. WebView未包裝內容
- 26. 過濾器內的包裝
- 27. 包裝僅可見內容
- 28. 防止div內容包裝
- 29. FlowLayoutPanel不包裝內容
- 30. 用jquery包裝內容
我不是說Lua應該知道。我知道它不能,但SWIG不能說什麼? – 2010-05-18 15:37:54
SWIG只能執行默認API中可用的操作,它不能重寫源或語言。當lua_touserdata返回一個void *時,除非SWIG使用一個內部的獨立系統來自動處理這個結果並將正確的類型傳遞給你,所有你可以得到的都是void *。 – Puppy 2010-05-18 20:04:00