2009-02-10 10 views
18

सी से सी Calling a Lua function काफी सीधे आगे है लेकिन क्या स्टोर स्टोर के बाद कहीं भी लुआ फ़ंक्शन का कोई तरीका है? मैं घटनाओं पर उपयोग के लिए मेरे सी फ़ंक्शन में पास किए गए उपयोगकर्ता परिभाषित लुआ फ़ंक्शंस को संग्रहीत करना चाहता हूं, जैसे कि Connect function works in wxLuaएक लुआ समारोह स्टोर करें?

उत्तर

23

रजिस्ट्री की जांच करें (luaL_ref())। यह एक साधारण टेबल का प्रबंधन करता है जो आपको किसी भी लुआ मान (फ़ंक्शन की तरह) स्टोर करने देता है, और इसे सी से सरल पूर्णांक द्वारा संदर्भित करता है।

+2

लुआ रेफरी अभी भी शांत है - विश्वास नहीं कर सकता कि मैं इस सुविधा के बारे में जानने के बिना इस समय लुआ का उपयोग कर रहा हूं। धन्यवाद! –

0

ऐसा करने का सबसे आसान तरीका आपके नाम के लिए "नाम" और लुआ फ़ंक्शन टेक्स्ट लेना है। फिर आप दुभाषिया में एक तालिका बनाते हैं (यदि यह अस्तित्व में नहीं है) और फिर नामित पैरामीटर का उपयोग कर तालिका में फ़ंक्शन को संग्रहीत करें।

अपने ऐप में बस प्रत्येक ईवेंट से जुड़े फ़ंक्शन नामों की एक सूची रखें। जब ईवेंट आग लगती है तो बस अपनी तालिका से सभी कार्यों को कॉल करें जिनकी कुंजी सूची में नामों से मेल खाती है।

+0

वह कार्यक्षमता पहले से मौजूद है और यह लूआ संदर्भ तालिका है क्योंकि जेवियर ने कहा था। –

+0

इस मामले में कार्यों का नामकरण करने में समस्या यह है कि हम चाहते हैं कि उपयोगकर्ता अनिवार्य रूप से एक ही नाम के साथ कई कार्यों को परिभाषित करने में सक्षम हो - उदा। बटन 1 के लिए "ऑनक्लिक" बटन 2 के लिए "ऑनक्लिक" से अलग है। –

13

जेवियर के उत्तर पर बिल्डिंग, लुआ में एक विशेष सार्वभौमिक रूप से सुलभ तालिका है जिसे रजिस्ट्री कहा जाता है, जो छद्म-सूचकांक LUA_REGISTRYINDEX का उपयोग कर सी एपीआई के माध्यम से सुलभ है। आप किसी भी लुआ मूल्य आप रजिस्ट्री (लुआ कार्यों सहित) में की तरह की दुकान और एक पूर्णांक है कि सी से यह उल्लेख करने के लिए इस्तेमाल किया जा सकता वापस प्राप्त करने की luaL_ref फ़ंक्शन का उपयोग कर सकते हैं:

// Assumes that the function you want to store is on the top of stack L 
int function_index = luaL_ref(L, LUA_REGISTRYINDEX);