2012-07-22 13 views
5

पर पास करने वाले पॉइंटर को मैं लगभग सी ++ नहीं जानता, इसलिए यह मदद नहीं कर रहा है, और मेरा एक्सएस बेहतर नहीं है। मैं एक सी ++ लाइब्रेरी के लिए एक एक्सएस इंटरफ़ेस बना रहा हूं और मेरे पास लगभग सभी विधियां हैं जो एक को छोड़कर काम कर रही हैं।बर्ल एक्सएस और सी ++ बफर

पर्ल में विधि इस तरह दिखना चाहिए:

$return_data = $obj->readPath($path); 

विधि इस रूप में ज फ़ाइल परिभाषित किया गया है:

int readPath(const char* path, char* &buffer, bool flag=true); 

अगर यह शून्य में पारित कर दिया है आवंटित हो जाएगी 'बफर " ।

विभिन्न हस्ताक्षरों के साथ रीडपाथ के दो अतिरिक्त संस्करण हैं, लेकिन वे मेरे इच्छित नहीं हैं। (और दिलचस्प बात यह है कि जब मैं कोशिश करता हूं और संकलित करता हूं तो मुझे बताता है कि "उम्मीदवार" वे दो हैं जिन्हें मैं नहीं चाहता हूं।) क्या ऐसा इसलिए है क्योंकि यह "char * &" को समझ नहीं रहा है?

क्या कोई मुझे लिखने की आवश्यकता वाले xsub के साथ मदद कर सकता है?

मैं पर्ल 5.14.2 पर हूं।

बीटीडब्ल्यू - मैंने टी_आईवी को "लंबे समय तक int" टाइप किया है। मुझे लंबे समय तक सही ढंग से टाइप करने के तरीके पर कोई दस्तावेज नहीं मिल रहा है। कोई सुझाव है कि मुझे लंबे समय तक कैसे टाइप करना चाहिए?

धन्यवाद,

उत्तर

3

मैं कभी नहीं सी या XS से C++ के साथ पेश किया है। यदि यह सी था, तो यह होगा:

void 
readPath(SV* sv_path) 
    PPCODE: 
     { 
     char* path = SvPVbyte_nolen(sv_path, len); 
     char* buffer = NULL; 

     if (!readPath(path, &buffer, 0)) 
      XSRETURN_UNDEF; 

     ST(0) = sv_2mortal(newSVpv(buffer, 0)); 
     free(buffer); 

     XSRETURN(1); 
     } 

उम्मीद है कि यह काम करता है या आप इसे काम पर समायोजित कर सकते हैं।


मैं मान लिया है:

  • readPath रिटर्न सही/सफलता/असफलता के लिए झूठी।
  • buffer विफलता पर आवंटित नहीं किया गया है।
  • buffer के लिए डेलोकेटर free है।
+1

आपके उत्तर का यह हिस्सा जो मेरे लिए हल किया गया था यह समझ रहा था कि मुझे सीएस + एक्सएस संरचना - कक्षा :: विधि (...) - xsub में उपयोग करने की आवश्यकता नहीं है। मैं एक हस्ताक्षर खोजने की कोशिश करता रहा कि एक्सएस स्वीकार करेगा लेकिन एक बार जब मैंने इसे हटा दिया तो इसे हल करना बहुत आसान था। धन्यवाद। – user1446426

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