Ich arbeite derzeit mit einem vorhandenen Modul, das eine C++ - Schnittstelle bereitstellt und einige Operationen mit Zeichenfolgen ausführt.Python: Übergabe der Unicode-Zeichenfolge an C++ - Modul
Ich musste leider Unicode-Strings und das Modul verwenden, hat keine Unterstützung für eine Unicode-Schnittstelle, so schrieb ich eine zusätzliche Funktion zur Schnittstelle hinzuzufügen:
void SomeUnicodeFunction(const wchar_t* string)
Allerdings, wenn ich versuche, verwenden Sie den folgenden Code in Python:
SomeModule.SomeUnicodeFunction(ctypes.c_wchar_p(unicode_string))
ich diesen Fehler:
ArgumentError: Python argument types in
SomeModule.SomeUnicodeFunction(SomeModule, c_wchar_p)
did not match C++ signature:
SomeUnicodeFunction(... {lvalue}, wchar_t const*)
(Namen wurden geändert).
Ich habe versucht, wchar_t im C++ - Modul zu Py_UNICODE ohne Erfolg zu ändern. Wie löse ich dieses Problem?
Boost.python erkennt die Ctypes-Typen nicht automatisch, soweit ich weiß, aber es sollte wahrscheinlich nur mit eingebauten Unicode-Strings funktionieren. Was passiert, wenn Sie versuchen, 'SomeModule.SomeUnicodeFunction (unicode_string)' aufzurufen? – Doug
@Tough: derselbe Fehler, aber mit "Unicode" anstelle von "C_Wchar_p" als Python-Argumenttyp. –
@Matthew, w/oder ohne 'c_wchar_p' Cast, es sieht so aus, als ob _should_ funktionieren sollte, außer vielleicht für die' const' (die nirgends in 'ctypes' 'docs erwähnt wird) - was passiert, wenn Sie das' 'weglassen const "im C-Code? (Beachten Sie, dass es keine direkte C++ - Unterstützung in 'ctypes' gibt: Die Funktion muss natürlich' extern C' aus C++ - Sicht sein). –