@Rudtoha

Как исправить ошибку при подключении Dll python?

Доброго времени суток, столкнулся со следующей проблемой: При вызове функции из dll, написанной на Си, pyton'ом получаю следующую ошибку: argument 1: : wrong type (код ниже)
import ctypes
from ctypes import *

CanApiDll = cdll.vs_can_api

handle = "12345"
U_Handle = handle.encode('utf-8')
DevHandle = c_char_p(U_Handle)

Mode = c_ulong(0)

PrototypeOpen = WINFUNCTYPE(c_int, c_char_p, c_ulong)   # c_char_p -> c_wchar_p
VSCanOpenParam = (1, "DevHandle", 0), (1, "Mode", 0)
VSCanOpen = PrototypeOpen(("VSCAN_Open", CanApiDll), VSCanOpenParam)
VSCanOpen(ctypes.byref(DevHandle), Mode)

Сначала думал, что ошибка кроется в вызове c_char_p и решил попробовать функцию, принимающую только c_int:
N = c_int(1)

PrototypeClose = WINFUNCTYPE(c_int, c_int)
VSCanCloseParam = (1, "DevHandle", 0),
VSCanClose = PrototypeClose(("VSCAN_Close" , CanApiDll), VSCanCloseParam)

VSCanClose(N)

Но появляется уже другая ошибка, которая выглядит так: Procedure probably called with too many arguments (4 bytes in excess)
Гугление не очень помогло, поэтому буду очень признателен, если поможете)
Заранее спасибо)
  • Вопрос задан
  • 238 просмотров
Решения вопроса 1
@NaName
def testImportMean():
    tmp_dll = cdll.LoadLibrary("/home/nick/python/dllTests/libmean.so")

    summ = 0
    for i in range(0, 1000):
        for j in range(0, 1000):
            summ += tmp_dll.mean(c_int(i), c_int(j))

    return summ


у меня вот такой тестовый вызов. у вас наверное ошибка в чтом что передавать в Си надо не int-питоний, а c_int
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@serf10
Та же проблема, как в итоге должно быть? И есть ли где-то готовый код обертка к адаптеру VSCOM на python'е?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы