2016-12-11 9 views
11

मैं एक सी पुस्तकालय पोर्ट करना चाहता हूं। इसके बारे में यहां वास्तव में एक छोटा सा ट्यूटोरियल है: Interacting with codeअपनी खुद की struct_info.json कैसे जोड़ें? (emscripten)

मुझे जावास्क्रिप्ट का उपयोग करके एक संरचना बनाने की आवश्यकता है, और इसमें एक पॉइंटर लौटाएं। मैंने पुस्तकालयों में देखा, जो पहले से ही पोर्ट किए गए हैं। ,

var ptr = _malloc({{{ C_STRUCTS.MyStruct.__size__ }}}); 

{{{ makeSetValue('ptr', C_STRUCTS.MyStruct.attr, '0', 'i8') }}}; 

यह काम नहीं करता है क्योंकि emscripten MyStruct के बारे में पता नहीं है: मेरे कोड इस तरह दिखता है।

मेरे पुस्तकालय परिभाषा --js-library का उपयोग कर परियोजना में जोड़ा जाता है लेकिन मैं एक struct परिभाषा (struct_info.json)

जोड़ने के बारे में सी कोड में पता नहीं है,, मेरे पास है:

struct MyStruct { 
    int8_t attr; 
    //... 
} 
+0

मुझे ईएमएसस्क्रिप्ट के बारे में पता नहीं है लेकिन क्या आप सी में 'createMyStruct' फ़ंक्शन नहीं बना सकते हैं और इसका उपयोग कर सकते हैं? –

+0

दुर्भाग्यवश यह एक विकल्प नहीं है। 'MyStruct_Create' फ़ंक्शन को जेएस –

+0

में लागू किया जाना आवश्यक है: http://stackoverflow.com/questions/28904273/struct-operations-in-javascript-through-emscripten – Ouroborus

उत्तर

1

आपको सी बनाना चाहिए लेकिन जेएस स्ट्रक्चर नहीं करना चाहिए। उदाहरण के लिए:

var st_t = new ctypes.StructType("st_t", 
     [ { "self": ctypes.PointerType(ctypes.void_t) }, 
     { "str": ctypes.PointerType(ctypes.char) }, 
     { "buff_size": ctypes.size_t }, 
     { "i": ctypes.int }, 
     { "f": ctypes.float }, 
     { "c": ctypes.char } ]); 

आशा है कि इससे मदद मिलेगी।

+1

संरचना पहले से ही सी में परिभाषित है लेकिन जेएस कोड इसे नहीं देख सकता है, क्योंकि संरचना जानकारी प्रदान नहीं की गई थी –

+0

जेएस के पास बाहरी सी structs को परिभाषित करने के लिए विशिष्ट कार्य हैं। –

संबंधित मुद्दे