Я пытаюсь использовать DLL, написанную на cpp внутри python, используя ctype. Однако некоторые ошибки видны
У меня есть код в cpp, что я переписываю небольшую часть в python.
Ошибка отображается при инициализации регистрации DLL.
C код: https://ideone.com/RLgM5u
import os
import sys
from ctypes import *
import ctypes as c
import time
bAtivo = False
bMarketConnected = False
class TAssetID(c.Structure):
_fields_ = [
("ticker", c.c_wchar_p),
("bolsa", c.c_wchar_p)]
dll = cdll.LoadLibrary("ProfitDLL")
@c.CFUNCTYPE(None, TAssetID, c.c_wchar_p, c.c_float, c.c_float, c.c_int, c.c_int, c.c_int, c.c_int)
def newTradeCallback(assetId, date, price, vol, qtd, buyAgent, sellAgent, tradeType):
print('oi')
@c.CFUNCTYPE(None, TAssetID, c.c_wchar_p, c.c_float, c.c_float, c.c_float, c.c_float, c.c_float, c.c_float, c.c_float, c.c_float, c.c_int, c.c_int, c.c_int, c.c_int, c.c_int, c.c_int, c.c_int, c.c_int)
def newDailyCallback(assetId, date, sOpen, sHigh, sLow, sClose, sVol, sAjuste, sMaxLimit, sMinLimit, sVolBuyer, sVolSeller, nQtd, nNegocios, nContratosOpen, nQtdBuyer, nQtdSeller, nNegBuyer, nNegSeller):
print('oi')
@c.CFUNCTYPE(None, TAssetID, c.c_wchar_p, c.c_float, c.c_float, c.c_int, c.c_int, c.c_int, c.c_int)
def newHistoryCallback(assetId, date, price, vol, qtd, buyAgent, sellAgent, tradeType):
print('oi')
@c.CFUNCTYPE(None, TAssetID, c.c_int)
def progressCallBack(assetId, nProgress):
print('oi')
@c.CFUNCTYPE(None, TAssetID, c.c_float, c.c_int, c.c_int)
def newTinyBookCallBack(assetId, proce, qtd, side):
print('oi')
@c.CFUNCTYPE(None, c.c_int, c.c_int)
def stateCallback(nConnStateType, result):
if nConnStateType == 0: # notificacoes de login
if result == 0:
print("(0-0) Login: Conectado.")
if result == 1:
print("(0-1) Login: Login invalido.")
if result == 2:
print("(0-2) Login: Senha invalida")
if result == 3:
print("(0-3) Login: Senha bloqueada")
if result == 4:
print("(0-4) Login: Senha expirada")
if result == 200:
print("(0-200) Login: Erro desconhecido")
if nConnStateType == 1: # notificacoes de broker
if result == 0:
print("(1-0) Broker: Desconectado.")
if result == 1:
print("(1-1) Broker: Connectando")
if result == 2:
print("(1-2) Broker: Conectado")
if result == 3:
print("(1-3) Broker: Desconectado")
if result == 4:
print("(1-4) Broker: Conectando")
if result == 5:
print("(1-5) Broker: Conectado")
if nConnStateType == 2: # notificacoes de login no Market
if result == 4:
print("(2-4) State: Conectado ao Profit")
time.sleep(3000)
bMarketConnected = True
else:
print("(2-" + result + ") State: Desconectado.")
bMarketConnected = False
if nConnStateType == 3: # notificacoes de login no Market
if result == 0:
print("(3-0) Atividade: Valida.")
bAtivo = True
else:
print("(3-" +result+ ") Atividade: Invalida.")
bAtivo = False
if (nConnStateType == 3 or nConnStateType == 2) and (bAtivo and bMarketConnected):
dll.SubscribeTicker("WINM20","F")
Code = "d5646546556164654"
keystr = c_wchar_p(Code)
dll.InitializeMarket(keystr, stateCallback, newTradeCallback, newDailyCallback, newHistoryCallback, newTinyBookCallBack)
Traceback (последний вызов был последним): файл ". \ AplicationTrader.py", строка 104, в dll.InitializeMarket (keystr, stateCallback, newTradeCallback, newDailyCallback, newHistoryCallback, newTinyBookCallBack) ValueError: Процедура, вызываемая с недостаточным количеством аргументов (28 байт отсутствует) или неверное соглашение о вызовах
Я очень благодарен за внимание.