передача односимвольного / многосимвольного пользовательского ввода из функции python в функцию C ++ - PullRequest
1 голос
/ 16 сентября 2011

У меня есть функция C ++ .dll, к которой я обращаюсь через python 3.2 с синтаксисом:

int Create(char argID)

, и я пытаюсь получить доступ к этой функции с помощью python.Я могу получить к нему доступ, но меня смущает, почему он говорит « неправильный тип » всякий раз, когда я пытаюсь передать функции аргумент.Скрипт Python:

Create.argtypes = [c_char]
Create.restype = c_int
ID = c_char
ID = input("Enter ID:")
Create(ID) #ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

Не уверен, где я иду не так или есть другой способ передать символ или символы из пользовательского ввода?Пожалуйста, помогите.

Приветствия.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

c_char является однобайтовым значением, а не строкой Unicode.Установите ID = bytes(ID, 'utf8')[0] (или используйте 8-битное сопоставление символов, отличное от utf8, например, latin-1).Тогда вы можете позвонить Create(ID).

Кстати, присвоение идентификатора c_char дает вам еще одну ссылку на c_char, а затем вы немедленно переназначаете ID возвращаемой строке из input.Единственный раз, когда я вижу это, когда люди работают с ctypes.Это как будто мозг застревает в режиме статической печати. ​​

0 голосов
/ 16 сентября 2011

Ваша функция Create принимает в качестве аргумента один символ, а не строку.

s = input("enter ID:")
c = ctypes.c_char(s[0])
Create(c)
...