मैं SWIG (पायथन को लक्ष्य के रूप में) के साथ एक लाइब्रेरी लपेट रहा हूं। लाइब्रेरी फ़ंक्शंस में डेटाटाइप "uint32_t", "uint8_t" आदि के साथ पैरामीटर शामिल हैं। मैं इंटरफ़ेस को क्रॉस-प्लेटफॉर्म के रूप में संभव बनाना चाहता हूं, इसलिए मैं अपने interface.i
फ़ाइल में मूल फ़ंक्शन हस्ताक्षर का उपयोग करना चाहता हूं। उदाहरण के लिए:SWIG के साथ एक क्रॉस प्लेटफ़ॉर्म इंटरफ़ेस कैसे उत्पन्न करें?
uint32_t func(uint32_t a, uint32_t b);
मुद्दा मैं हल करने के लिए कोशिश कर रहा हूँ कि बड़ा घूँट एक पूर्णांक के रूप में पैरामीटर पहचान नहीं होगा जब तक कि वहाँ है uint32_t
डेटाप्रकार पर एक typedef
है। ठीक पर है
>>> mylib.func(2, 2)
TypeError: in method 'func', argument 1 of type 'uint32_t'
पिछले typedef
:
typedef unsigned uint32_t;
निकाला जा रहा है कि typedef
लाइन समारोह का कारण लक्ष्य पायथन बंधन से प्रतिदेय नहीं होगा: अभी मैं इंटरफ़ेस फ़ाइल पर यह उपयोग कर रहा हूँ मेरी स्थानीय मशीन, लेकिन किसी अन्य कंपाइलर/मंच पर अलग हो सकती है। निर्देश %include "stdint.h"
का उपयोग करना बड़ा घूँट पर एक त्रुटि बढ़ा देंगे:
/usr/include/stdint.h:44: Error: Syntax error in input(1).
कौन सा समझ में आता है के बाद से बड़ा घूँट एक पूर्ण विशेषताओं संकलक नहीं है, और पूरी तरह से है कि शीर्ष लेख पर सभी #ifdef
का मूल्यांकन नहीं कर सकते हैं।
मैं stdint.h
हेडर पर संकलक चुनने वाले डेटाटाइप के साथ सही ढंग से SWIG कैसे खिला सकता हूं? वास्तव में सही डेटाटाइप को कड़ाई से लागू करने के लिए समझ में आता है, या typedef
सभी intX_t
से long
ठीक है?