Python ctypes ERROR: исключение: запись нарушения прав доступа 0x00DEF6CC - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь импортировать 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);

Кто-нибудь знает, что я могу делать неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...