2011-07-08 60 views
0

我的腳本註冊本身使用的Lua回調到模塊

require "cmodule" 
index = 1 
cmodule.RegisterSoftButtonDownCallback(index, "callbackFunc") 

回調,其中callbackFunc是回調函數的名稱(字符串)。現在我把這個腳本到一個模塊中,但回調不叫了,我想是因爲回調函數是不是在cmodule的範圍。我該如何解決這個問題? (LUA新手)

cmodule是具有的Lua綁定的設備驅動器。

編輯:我的總部設在從下面BMitch答案完整的解決方案:

require "cmodule" 
local modname = "myModule" 
local M = {} 
_G[modname] = M 
package.loaded[modname] = M 
local cmodule = cmodule 
local _G = _G 
setfenv(1,M) 

function callbackFunc() 
    -- use module vars here 
end 
_G["myModule_callbackFunc"] = callbackFunc 
index = 1 
cmodule.RegisterSoftButtonDownCallback(index, "myModule_callbackFunc") 
+0

什麼是'cmodule'?這不是Lua 5.1的一部分。它從何而來?它是全局變量還是本地變量? –

+0

cmodule是具有的Lua綁定的設備驅動器。我做了要求「cmodule」的腳本(裝載cmodule.dll)的開始。這不是我開發的。如果知道究竟是什麼,我可以嘗試聯繫作者很重要。 – Emile

回答

2

你需要有全局空間定義爲一個字符串的東西進行評估回函數調用。

取決於他們如何實現RegisterSoftButtonDownCallback,您可能會被困在定義函數本身,而不是像myModule.callbackFunc這樣的表/字段組合。爲了儘量減少污染命名空間,如果你不能使用myModule.callbackFunc,那麼我建議myModule_callbackFunc=myModule.callbackFunc或類似的東西。所以,你的代碼看起來像:

require "cmodule" 
index = 1 
myModule_callbackFunc=myModule.callbackFunc 
cmodule.RegisterSoftButtonDownCallback(index, "myModule_callbackFunc") 

爲了更好的修復,我將與cmodule開發商的工作就是讓他們的計劃,接受一個函數指針,而不是一個字符串。然後你的代碼如下所示:

require "cmodule" 
index = 1 
cmodule.RegisterSoftButtonDownCallback(index, myModule.callbackFunc) 
+0

謝謝,這讓我在正確的軌道上。我會將我的解決方案添加到原始問題中,以便其他人可以從中受益。如果您認爲可以改進,請評論。 – Emile