Python 3.5 - ctypes - создать строковый буфер для Citect API

Я хотел бы получить доступ к нашей системе Citect SCADA из внешнего скрипта на Python. Я нашел пример кода здесь: https://github.com/mitchyg/Random/blob/master/pyctapi/src/pyctapi.py

Когда я запускаю этот фрагмент кода:

def ct_tag_read(self, tag_name):
    buffer = create_string_buffer('\000' * 32)
    ok = windll.CtApi.ctTagRead(self.hCTAPI, tag_name, byref(buffer), sizeof(buffer), None)

    return buffer.value

Я получаю эту ошибку:

line 63, in create_string_buffer
raise TypeError(init)
TypeError:  

Я использую Python 3.5.

Вот описание функции Citect API ct_TagRead:

http://www.citect.schneider-electric.com/webhelp/vijeo740/Content/ctTagRead.html

1 ответ

Решение

Хорошо, во-первых, я перепутал аргументы для ctCicode и ctTagRead, чтобы код выглядел так (без аргумента "None"):

def ct_tag_read(self, tag_name):
    buffer = create_string_buffer('\000' * 32)
    ok = windll.CtApi.ctTagRead(self.hCTAPI, tag_name, byref(buffer), sizeof(buffer))
    if ok == False:
        print("Unable to read TAG")
        return

return buffer.value

Я перешел на Python 2.7 и все работает нормально.

Другие вопросы по тегам