Я пытаюсь импортировать C / C ++ dll с lib ctypes и использовать функцию , которая есть у него при передаче Параметры этой функции Я всегда сталкиваюсь с ошибкой:
ERROR: exception: access violation writing 0x00DEF6CC
Process finished with exit code 1
Я использовал cast
, string_buffer
и POINTER
, но все равно я получаю ту же ошибку
Вот код:
import ctypes
import sys
file_path = './lib/poc-pagamento-dpos.dll'
integracao_pos = ctypes.cdll.LoadLibrary(file_path)
def main():
try:
integracao_pos.carregarRegistros()
integracao_pos.atribuirCallbacks(callback=display_msg)
transacao_credito()
except OSError as e:
print("ERROR: %s" % e)
sys.exit(1)
def transacao_credito():
pNumeroControle = ctypes.create_string_buffer(b"1234567")
pValorTransacao = ctypes.create_string_buffer(b"15000")
pNumeroCupom = ctypes.create_string_buffer(b"1234567")
pTipoOperacao = ctypes.create_string_buffer(b"FA")
pNumeroParcelas = ctypes.create_string_buffer(b"2")
pValorParcela = ctypes.create_string_buffer(b"0")
integracao_pos.transacaoCartaoCreditoDPOS.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p,
ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p]
integracao_pos.transacaoCartaoCreditoDPOS(pValorTransacao, pNumeroCupom, pNumeroControle,
pTipoOperacao, pNumeroParcelas, pValorParcela)
def display_msg(msg):
print("----------------->{}".format(msg))
if __name__ == '__main__':
main()
Реализация C ++
char cNumeroControle[6 + 1];
char cTipoOperacao[2 + 1];
char cNumeroParcelas[2 + 1];
char cValorParcela[12 + 1];
char cValorEntrada[12 + 1];
char cValorTaxaServico[12 + 1];
char pPermiteAlteracao[1 + 1];
extern POCPAGAMENTODPOS_API int transacaoCartaoCreditoDPOS(char* pValorTransacao, char* pNumeroCupom, char * pNumeroControle,
char* pTipoOperacao, char* pNumeroParcelas, char* pValorParcela);
Кто-нибудь знает, что я могу делать неправильно?