Com o crescimento da complexidade dos sistemas em informática, cada vez mais, programadores tendem a utilizar arquivos disponibilizados, neste caso, principalmente por empresas, onde contem informações de acesso direto a seus produtos.
Neste exemplo, utilizaremos duas das principais DLL's em uso no mercado de desenvolvimento de software coorporativo. São elas:
DllInscE32.dll: Disponibilizada pelo governo através do link: http://www.sintegra.gov.br/DLL3.zip. Sendo responsável pela verificação da validade de qualquer Inscrição Estadual existente no pais.
Um dos inconvenientes do uso de DLL's é o vinculo com os sistemas Windows, mas fica para uma próxima etapa o uso de ferramentas similares para o mesmo propósito.
Para iniciarmos basta copiar as DLL's apresentadas para diretório: C:\Windows\System32.
Utilizaremos o módulo ctype do Python que é responsável por compatibilizar e possibilitar chamar funções em DLL's ou bibliotecas compartilhadas.
Em nosso primeiro exemplo estará em uso a DLL BemaFI32.dll disponibilizada pela Bematech com o intuito da Abertura da Gaveta de uma ECF - Emissor de Cupom Fiscal. Já no segundo, apresentaremos a DLLInscE32.dll contendo uma rotina muito útil para validação de Inscrição Estadual, visto que, ela aborta todos os casos possíveis de acontecer.
Maiores informaçoes em ctype, BemaFI32.dll e DLLInscE32.DLL,
José Mauro da Silva Sandy
Neste exemplo, utilizaremos duas das principais DLL's em uso no mercado de desenvolvimento de software coorporativo. São elas:
DllInscE32.dll: Disponibilizada pelo governo através do link: http://www.sintegra.gov.br/DLL3.zip. Sendo responsável pela verificação da validade de qualquer Inscrição Estadual existente no pais.
Inscrição Estadual é o registro do contribuinte ao cadastro do ICMS - Imposto sobre Operações relativas à Circulação de Mercadorias e Prestação de Serviços de Transporte Interestadual e Intermunicipal e de Comunicação, e assim o contribuinte passa a ter seu registro junto à Receita Estadual do seu respectivo estado.BemaFI32.dll: Disponibilizada pela Bematech, empresa especializada em Automação Comercial, utilizada por diversos sistemas empresariais, realizando uma perfeita integração entre o hardware disponibilizado pela Bematech e os softwares que interagem com os dispositivos.
Um dos inconvenientes do uso de DLL's é o vinculo com os sistemas Windows, mas fica para uma próxima etapa o uso de ferramentas similares para o mesmo propósito.
Para iniciarmos basta copiar as DLL's apresentadas para diretório: C:\Windows\System32.
Utilizaremos o módulo ctype do Python que é responsável por compatibilizar e possibilitar chamar funções em DLL's ou bibliotecas compartilhadas.
Em nosso primeiro exemplo estará em uso a DLL BemaFI32.dll disponibilizada pela Bematech com o intuito da Abertura da Gaveta de uma ECF - Emissor de Cupom Fiscal. Já no segundo, apresentaremos a DLLInscE32.dll contendo uma rotina muito útil para validação de Inscrição Estadual, visto que, ela aborta todos os casos possíveis de acontecer.
Obs.: Para maiores informações sobre as funções existentes nestas DLL's, favor conferir a documentação disponível pelas empresas.Usaremos em ambos os scritps apenas um função de cada DLL, afim de , exemplificar seu uso.
Bematech_FI_VerificaEstadoGaveta(): Abre a gaveta de dinheiro de uma ECF, retornando um valor inteiro como saída da operação.Exemplo 1:
ConsisteInscricaoEstadual(inscrição, estado): Recebe como argumento a Inscrição Estadual(em string e sem pontos) e a UF – Unidade Federativa(string e maiúscula) e retorna 0 caso a inscrição for válida e 1 caso contrário.
#!/usr/bin/env python # AUTHOR: Jose Mauro da Silva Sandy - http://informacaocomdiversao.blogspot.com # # CONTACT: jmsandy _at_ gmail _dot_ com # # DATE: 2008-10-22 ############################################################################### import ctypes library = ctypes.WinDLL("C:\Windows\System32\BemaFI32.dll") ret = library.Bematech_FI_AcionaGaveta() if ret == -27: print "Status da impressora diferente de 6,0,0 (ACK, ST1 e ST2)" elif ret == -5: print "Erro ao abrir a porta de comunicacao" elif ret == -4: print "O arquivo de inicializacao BemaFI32.ini nao foi encontrado no\ diretorio de sistema do Windows" elif ret == 0: print "Erro de comunicacao" else: print "ABRIU"Exemplo 2:
#!/usr/bin/env python # AUTHOR: Jose Mauro da Silva Sandy - http://informacaocomdiversao.blogspot.com # # CONTACT: jmsandy _at_ gmail _dot_ com # # DATE: 2008-10-22 ############################################################################### import ctypes lib = ctypes.WinDLL("C:\Windows\System32\DllInscE32.dll") try: estado = raw_input("Digite o estado:") inscricao = raw_input("Digite a inscricao(somente numeros):") resultado = lib.ConsisteInscricaoEstadual(inscricao,estado) if not resultado: print "Inscricao valida" else: print "Inscricao invalida" except: print "Erro de conversao"
Maiores informaçoes em ctype, BemaFI32.dll e DLLInscE32.DLL,
José Mauro da Silva Sandy
2 comentários:
23 de outubro de 2008 às 07:42
Gostei da postagem. Mostra como é simples a utilização de DLLs em Python. Por curiosidade, acessei os 2 sites (Sintegra e Bematech) e percebi que, infelizmente, o Sintegra só disponibiliza arquivos para Windows e de forma fechada, o que é uma pena. Normalmente é bom saber como módulos de terceiros funcionam... Já a Bematech tem uma sessão de Unix. Será que a forma de importação e uso da mesma é semelhante em sistemas Unix-like, como Linux, BSD e OS X? Seria interessante que sim. No mais, gostei da abordagem e dos códigos de exemplo.
Abraço!
1 de julho de 2013 às 22:34
Excelente post! Estou precisando fazer o download da mfd e tratá-la!
Tem como fazer em Python ?
Postar um comentário