मैंने एक निजी सदस्य वैरिएबल जोड़कर और जब मैं अजगर कोड चलाता हूं (पहले से ही सी ++ कोड संकलित कर लेने के बाद), मुझे एक सेगमेंटेशन गलती मिल रही है जिस पर मैंने सेग गलती नहीं होती है मैं सच में हैरान हूं कि यह क्यों हो रहा है। चूंकि यह सीटीपीपी सीखने का एक प्रयोग है, किसी भी मदद की सराहना की जाएगी। यदि आप 64-बिट पायथन का उपयोग कर रहे हैं, तो आपको यहां 2.7.5, स्रोत के लिए स्रोत लिंक हैं 64-बिट विंडोज़ के लिए एक सी <कोड> लंबे बार () फ़ंक्शन:
#include & lt; iostream & gt; वर्ग फू {निजी: डबल मी; सार्वजनिक: फू () {m = 2.344; }; शून्य बार () {std :: cout & lt; & lt; "हैलो, संख्या है" & lt; & lt; एम एंड एलटी; & lt; std :: endl; }}; Extern "C" {Foo * Foo_new () {नई Foo पर वापस जाएँ} } शून्य Foo_bar (Foo * foo) {foo- & gt; बार (); }}
ctypes आवरण अपरिवर्तित था और यह है:
से आयात करें ctypes import * lib = cdll.LoadLibrary ('। / Libfoo.so ') वर्ग फू (वस्तु): def __init __ (स्वयं): self.obj = lib.Foo_new () def बार (स्व): lib.Foo_bar (self.obj) f = Foo () f.bar ( )
m में
बार () ।
m का मुद्रण हटाता हूं, लेकिन इसे रखता हूं
m को
बार () में किसी भी निश्चित संख्या के साथ बदलता हूं।
restype < कोड> और
argtypes । अन्यथा ctypes को 32-बिट C
int । के मानों को कास्ट करने के लिए डिफ़ॉल्ट। Ctypes आयात से * lib = CDLL ('। / Libfoo.so') Foo_new.argtypes = [] lib.Foo_new.restype = c_void_p lib.Foo_bar.argtypes = [c_void_p] lib.Foo_bar.restype = कोई भी
int को मजबूर करके परिणाम कम से कम सुसंगत है।
No comments:
Post a Comment