Attualmente sto lavorando con un modulo esistente che fornisce un'interfaccia C++ e fa alcune operazioni con le stringhe.Python: passaggio della stringa unicode al modulo C++
ho bisogno di usare le stringhe Unicode e il modulo, purtroppo, non ha avuto alcun supporto per l'interfaccia Unicode, così ho scritto una funzione in più per aggiungere l'interfaccia:
void SomeUnicodeFunction(const wchar_t* string)
Tuttavia, quando tento di utilizzare il seguente codice in Python:
SomeModule.SomeUnicodeFunction(ctypes.c_wchar_p(unicode_string))
ottengo questo errore:
ArgumentError: Python argument types in
SomeModule.SomeUnicodeFunction(SomeModule, c_wchar_p)
did not match C++ signature:
SomeUnicodeFunction(... {lvalue}, wchar_t const*)
(i nomi sono stati modificati).
Ho provato a cambiare wchar_t nel modulo C++ a Py_UNICODE senza successo. Come risolvo questo problema?
Boost.python non riconosce automaticamente i tipi di caratteri, per quanto ne so, ma probabilmente dovrebbe funzionare solo con stringhe unicode incorporate. Cosa succede se provi a chiamare 'SomeModule.SomeUnicodeFunction (unicode_string)'? – Doug
@Dough: lo stesso errore, ma con "unicode" invece di "c_wchar_p" come tipo di argomento Python. –
@Matthew, w/o w/o il cast di 'c_wchar_p', sembra che _should_ funzioni eccetto forse per il' const' (che non è menzionato da nessuna parte nei documenti 'ctypes'') - cosa succede se si omette il ' const' nel codice C? (Nota: non esiste un supporto C++ diretto in 'ctypes': la funzione deve essere' extern C' dal punto di vista di un C++, ovviamente). –