python - अजगर-कैसे एक एलपीसी_______या स्ट्रिंग को बाइट में परिवर्तित करना है?



c++ json (0)

यह स्टैक ओवरफ्लो में मेरा पहला प्रश्न है मैं इस का जवाब देख रहा हूं, लेकिन मुझे यह नहीं मिला।

मैं एक कॉलबैक प्राप्त करने की कोशिश कर रहा हूं जिसमें स्ट्रिंग होनी चाहिए। यह कॉलबैक एक C ++ dll से आता है। डेल लोडिंग और कॉलबैक कार्य से संबंधित सभी चीजें, लेकिन जब कॉलबैक सामग्री को पार्स करने की बात आती है तो यह क्रैश हो जाता है

डिबगिंग मैंने देखा है कि कैसे मेरे कॉलबैक कार्यान्वयन को बुलाया जाता है और मैं वहां एक "हैलो" प्रिंट कर सकता हूं, लेकिन कॉलबैक द्वारा लौटा हुआ ऑब्जेक्ट को सीरियलकृत नहीं किया जा सकता। यह त्रुटि है:

TypeError: the JSON object must be str, bytes or bytearray, not 'LP_c_char_p'

इस तरह से मैं DLL को लोड करता हूं I मैं सीडीएल का उपयोग कर रहा हूं:

self.dxc_dll = cdll.DxC

मेरी कॉलबैक घोषणा (सीटीआईपीज़ का प्रयोग करके) यह है:

self.callback_type = CFUNCTYPE(c_char_p, POINTER(c_char_p))
self.callback = self.callback_type(self.callback_impl)

विधि, callback_impl में यह हस्ताक्षर है:

def callback_impl(self, result):
    print("Callback works. Result: ", result)
    my_object = MyClass(result)
    ...

और यह MyClass init निर्माता है:

def __init__(self, json_string):
    self.__dict__ = json.loads(json_string)

मेरी सी ++ लाइब्रेरी में, कॉलबैक हस्ताक्षर को इस तरह घोषित किया जाता है (यह पीनवोक और सी # का उपयोग कर काम करता है, मैंने पहले से ऐसा किया है, लेकिन इस मामले में नहीं):

CCallback::CCallback(char *(__stdcall  *func)(char *))

इसलिए मुझे नहीं पता है कि क्या यह json.loads व्यवहार से संबंधित हो सकता है या इससे पहले एलपी_c_चर_पी को str या बाइट में परिवर्तित करना आवश्यक है।

  • मैं पायथन के साथ शामिल मानक सीटीपीज़ और जेएसएन लाइब्रेरीज़ का उपयोग कर रहा हूं
  • मैं विंडोज 10 एक्स 64, Python 3.6.1 32bit पर PyCharm 2017 का उपयोग कर रहा हूँ और dll पुस्तकालय 32 बिट संस्करण दृश्य स्टूडियो 2013 के साथ संकलित (विंडोज के तहत भी)

क्या मै कुछ कर सकता हुं? आपकी सहायता के लिये पहले से ही धन्यवाद। अगर आपको मदद के लिए अधिक जानकारी मिलती है, तो मुझे इसमें शामिल करने में खुशी होगी सादर।





ctypes