LINUX.ORG.RU

Не могу передать char* через ctypes

 


0

1

У меня подозрение, что неправильно передаётся поинтер. Пробовал менять типы на POINTER и c_char_p, не помогает

from xdo import Xdo
win_id = xdo.get_window_at_mouse()
what = "TEST"
xdo.enter_text_window(win_id, what)
Traceback (most recent call last):
  File "xdo_test.py", line 23, in <module>
    xdo.enter_text_window(ff_win_id, what)
  File "/usr/lib/python3.7/site-packages/xdo/__init__.py", line 262, in enter_text_window
    return _libxdo.xdo_enter_text_window(self._xdo, window, string, delay)
ctypes.ArgumentError: argument 3: <class 'TypeError'>: wrong type

public python class: https://github.com/rshk/python-libxdo/blob/master/xdo/__init__.py#L247

private python: https://github.com/rshk/python-libxdo/blob/master/xdo/xdo.py#L593

shared C library: https://github.com/jordansissel/xdotool/blob/master/xdo.h#L357

★★★★★

Последнее исправление: steemandlinux (всего исправлений: 2)

Небольшое исследование говорит о том, что это проблема 3-го бидона.

steemandlinux ★★★★★
() автор топика

ЯННП, но разберусь.

class Wrapper():
    # wrap xdo instance for python 3 to convert between bytes & uuencode
    def __init__(self, _xdo):
        self._xdo = _xdo
    def __getattr__(self, name):
        func = getattr(self.__dict__['_xdo'], name)
        if callable(func):
            def my_wrapper(*args, **kwargs):
                args = [a.encode() if isinstance(a, str) else a for a in args]
                kwargs = {k: a.encode() if isinstance(a, str) else a for k, a in kwargs.items()}
                ret = func(*args, **kwargs)
                return ret.decode() if isinstance(ret, bytes) else ret
            return my_wrapper
        else:
            return func.decode() if isinstance(func, bytes) else func

xdo = Wrapper(Xdo())
steemandlinux ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.