Tôi đang làm việc với một mô đun hiện có tại thời điểm cung cấp giao diện C++ và thực hiện một số thao tác với chuỗi.Python: Chuyển chuỗi unicode sang mô-đun C++
tôi cần phải sử dụng chuỗi Unicode và các mô-đun tiếc là đã không có bất kỳ sự hỗ trợ cho một giao diện Unicode, vì vậy tôi đã viết một chức năng phụ thêm vào giao diện:
void SomeUnicodeFunction(const wchar_t* string)
Tuy nhiên, khi tôi cố gắng để sử dụng đoạn mã sau bằng Python:
SomeModule.SomeUnicodeFunction(ctypes.c_wchar_p(unicode_string))
tôi nhận được lỗi này:
ArgumentError: Python argument types in
SomeModule.SomeUnicodeFunction(SomeModule, c_wchar_p)
did not match C++ signature:
SomeUnicodeFunction(... {lvalue}, wchar_t const*)
(tên đã được thay đổi).
Tôi đã thử thay đổi wchar_t trong mô-đun C++ thành Py_UNICODE mà không thành công. Làm thế nào để giải quyết vấn đề này?
Boost.python không tự động nhận dạng các loại ctypes, theo như tôi biết, nhưng có lẽ nó chỉ hoạt động với các chuỗi unicode tích hợp. Điều gì sẽ xảy ra nếu bạn cố gắng gọi 'SomeModule.SomeUnicodeFunction (unicode_string)'? – Doug
@Dough: cùng một lỗi, nhưng với "unicode" thay vì "c_wchar_p" làm loại đối số Python. –
@Matthew, w/hoặc w/o 'c_wchar_p' cast, có vẻ như nó _should_ làm việc ngoại trừ có thể cho' const' (không được đề cập trong tài liệu 'ctypes'') - điều gì sẽ xảy ra nếu bạn bỏ qua ' const' trong mã C? (Lưu ý không có hỗ trợ C++ trực tiếp trong 'ctypes': hàm phải là' extern C' từ quan điểm của C++, tất nhiên). –