Ir para conteúdo
  • Cadastre-se

dev botao

ACBr32.dll padrão stdcall para vb6 Ajuda


xmaxmex
  • Este tópico foi criado há 4079 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

no svn na pasta \Projetos\ACBr32_DLL\ACBr32 possui a versão compilada

juliomar,

Quando tento utilizar esta DLL, pois acabei de atualizar pelo SVN ela me da o seguinte erro:

Run time Error '49':

Bad DLL calling convention

E se eu utilizar a DLL que esta na pasta \Projetos\ACBr32_DLL\ACBr_ActiveX, que é menor, cerca de 900 Kb contra essa de 1.6 MB.

Funciona perfeitamente !

Fico no aguardo para essa atualização.

E obrigado.

Link para o comentário
Compartilhar em outros sites

Ok,

Procurando no Forum, baixei o Lazarus ultima versão e recompilei o ACBr32.dll com o padrão STDCALL.

E já testei a DLL com o ActiveX que estou desenvolvendo, tipo novas funções como NumCRZ e Leituras de Memoria.

Segue DLL padrão STDCALL para uso com linguagens COM baixado ainda a pouco pelo SVN, como vb6, que estou usando.

em anexo versão 0.9.0.26.

Atenciosamente,

ACBr32.rar

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Obrigado pela Contribuição

Gostaria de deixar aqui o exemplo de nosso amigo "xmaxmex" aos demais

por falta de tempo dos administradores para colocar a versão compilada junto ao SVN ele baixou o lazarus e fez a compilação

e foi mais além, disponibilizou aos nobres colegas ela compilada

quero novamente dar os parabéns e agradecer a contribuição

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Obrigado pela Contribuição

Gostaria de deixar aqui o exemplo de nosso amigo "xmaxmex" aos demais

por falta de tempo dos administradores para colocar a versão compilada junto ao SVN ele baixou o lazarus e fez a compilação

e foi mais além, disponibilizou aos nobres colegas ela compilada

quero novamente dar os parabéns e agradecer a contribuição

Obrigado Juliomar,

O Projeto ACBR é demais, em breve postarei o ActiveX com diversas funções, como balança e leitura de memória fiscal.

E se precisarem, podem contar comigo para testes e etc.

Cordialmente,

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

O Projeto ACBR é demais, em breve postarei o ActiveX com diversas funções, como balança e leitura de memória fiscal.

E se precisarem, podem contar comigo para testes e etc.

Cordialmente,

Obrigado xmaxmex ... Se você quiser postar os códigos em VB6 do ACBrActiveX eu atualizo o SNV com eles.

Esse o projeto ACBrActiveX nós iniciamos apenas como um conceito, mas não evoluímos muito além disso.

Se você for utilizar o ACBrDLL com o VB6 pode contar conosco para qualquer esclarecimento na hora de implementar.

Abs!

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Que bom Rafael,

Desculpa a demora na resposta.

Mas sim, tenho o OCX com várias funções implantadas e testadas, como faria para enviar para você dar uma olhada nela.

Fico no aguardo

Oooopa!

Vc chegou em boa hora.

Nós estamos reestruturando todo o projeto, agora ele se chama ACBrFramework.

Temos além do ECF os componentes PAF, AAC, EAD e Sintegra implementados, e tá aumentando.

Fizemos uma estrutura bem legal pra permitir compilar em 32 e 64 bits, e em STDCALL para o VB também.

E desenvolvemos um utilitário chamado DefExporter que gera os arquivos do VB6 contendo as declarações da DLL, isso nos ajuda a manter os projetos sempre sincronizados

Enfim, remodelamos e melhoramos muita coisa, que ficou mais fácil de fazer agora.

Baixe a última versão dos fontes e veja como o novo projeto ACBrFramework.OCX está mais simples de manter.

Pode me mandar o que você tiver aí por email ou anexando aqui no fórum, que eu dou uma boa olhada.

Sua ajuda será muito bem vinda.

Abs!

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link para o comentário
Compartilhar em outros sites

Que bom Rafael,

Desculpa a demora na resposta.

Mas sim, tenho o OCX com várias funções implantadas e testadas, como faria para enviar para você dar uma olhada nela.

Fico no aguardo

Oooopa!

Vc chegou em boa hora.

Nós estamos reestruturando todo o projeto, agora ele se chama ACBrFramework.

Temos além do ECF os componentes PAF, AAC, EAD e Sintegra implementados, e tá aumentando.

Fizemos uma estrutura bem legal pra permitir compilar em 32 e 64 bits, e em STDCALL para o VB também.

E desenvolvemos um utilitário chamado DefExporter que gera os arquivos do VB6 contendo as declarações da DLL, isso nos ajuda a manter os projetos sempre sincronizados

Enfim, remodelamos e melhoramos muita coisa, que ficou mais fácil de fazer agora.

Baixe a última versão dos fontes e veja como o novo projeto ACBrFramework.OCX está mais simples de manter.

Pode me mandar o que você tiver aí por email ou anexando aqui no fórum, que eu dou uma boa olhada.

Sua ajuda será muito bem vinda.

Abs!

Beleza Rafael,

Acabei de recompilar a nova DLL para STDCALL e testei rapidamente agora no emulador da Sweda e funcionou lindo...

To anexando os meus ultimos fonte, você verá um projeto chamado TesteECF.vbp ele ta show, to tentando tornar o ActiveX igual, varias coisa já estão funcionando, estou com problemas nas Estruturas que não estão funcionado via ActiveX.... pro futuro.

Mas basta você adicionar todas as chamadas que já fiz, todas estão testadas :)

Fico no aguardo se puder ajudar em mais coisas, grande abraço.

Faça o Download aqui http://www.multisistemasnet.com/acbr32/ACBr_ActiveX.rar

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Amiguinhos,

Fiz alguns testes usando a Activex e a DLL com Harbour e TOleAuto(). Rodou perfeitamente com o emulador Logger e Serial Virtual Ports.

Exemplo utilizado, compilado usando Harbour tradicional .45 Flex.



/////////////////////////////////////////////////////////////////////////////

//

// ACBR - Funcoes Compativeis com ACBrECF

//

//         Autor: Jose Carlos da Rocha

//         Data: 30/10/2012

//         Email: [email protected]

//           MSN: [email protected]

//     Linguagem: xBase / Fivewin

//   Plataformas: DOS, Windows

// Requerimentos: Harbour/xHarbour

//

//   Link Acbr32: http://www.multisistemasnet.com/acbr32/ACBr32.rar

//  Link Activex: http://www.multisistemasnet.com/acbr32/ACBr_ActiveX.rar

//

//

/////////////////////////////////////////////////////////////////////////////

#include "fivewin.ch"

#include "dll.ch"


#define hDllECF "ACBr32.dll"


function Main(cModelo)


   local fn := Array(5)

   default cModelo := "12"


   oACBrX := TOleAuto():New( "ACBr_ActiveX.ACBrECF" )


   nModelo    := val(cModelo)

   lCancela   := .f.

   lVinculado := .f.

   //if oACBrX:AcharECF( .t., .t., 3 )

      // Encontrou uma ECF 

      //oACBrX:Device:Baud = 115200

      oACBrX:Porta = 'COM1'

      //oACBrX:TimeOut = 3

      oACBrX:Modelo = nModelo

      //  1 Emulador

      //  2 Bematech

      //  3 Sweda

      //  4 Daruma

      //  5 Schalter

      //  6 Mecaf

      //  7 Yanco

      //  8 DataRegis

      //  9 Urano

      // 10 ICash

      // 11 Quattro

      // 12 FiscNET

      // 13 Epson

      // 14 NCR

      // 15 SwedaSTX

	  //?"oACBrX:Ativar()"

	  cACBrAtivar := oACBrX:Ativar()

      if cACBrAtivar // empty( cACBrAtivar )

         // Ativou ECF

         // oACBrX:Ativo()

         //?"oACBrX:ModeloStr",   oACBrX:ModeloStr()

         //?"oACBrX:NumCupom",   oACBrX:NumCupom()

         //?"oACBrX:NumCOO",   oACBrX:NumCOO()

         //?"oACBrX:",   oACBrX:()

         //?"oACBrX:IdentificaConsumidor",   oACBrX:IdentificaConsumidor("11898853878","ROCHA","SEM ENDERECO")

         //? "TestaPodeAbrirCupom", oACBrX:TestaPodeAbrirCupom()

		 //?"oACBrX:AbrirCupom()"

         nEstadoECF := oACBrX:Estado

         do case

            Case nEstadoECF = 1

            Case nEstadoECF = 2

            Case nEstadoECF = 3

            Case nEstadoECF = 4

            Case nEstadoECF = 5

            Case nEstadoECF = 6

                 ? "Reducao Z do dia ja efetuada. ECF travado ate 00:00."

                 oACBrX:Desativar()

                 return nil

            Case nEstadoECF = 7

                 ? "O ECF precisa realizar REDUÇÃO Z."

                 if MsgYesNo( "Deseja imprimir Reducao Z?" )

                    nRetorno := oACBrX:ReducaoZ() // dtoc(date()-1)+" "+time())

                 else   

                    oACBrX:Desativar()

                    return nil

                 endif

            Case nEstadoECF = 8

            Case nEstadoECF = 9

         endcase

		 cACBrAbrirCupom := oACBrX:AbrirCupom("11898853878","ROCHA","SEM ENDERECO")

         if empty( cACBrAbrirCupom ) // AbreCupom("11898853878","ROCHA","SEM ENDERECO")

            // Se Abriu o cupom


            //?"oACBrX:VendeItemSimples"

			//lCancela := oACBrX:VendeItemSimples( "123", "Descricao", 10, 15.45 )

			lCancela := oACBrX:VendeItem( "123", "Descricao", "T00", "10", "15,45", "0", "UN", "%", "D" )

            // Vendeu um item

            //if ! lCancela; oACBrX:CancelaCupom(); endif


            //?"oACBrX:SubTotalizaCupom",;

			lCancela := oACBrX:SubTotalizaCupom( 0, "Sub Total" )

            // Subtotalizou

            //if ! lCancela; oACBrX:CancelaCupom(); endif


            sNCupom      := "100"

            sIndiceForma := "1" 

            //?"oACBrX:EfetuaPagamento",;

			lCancela := oACBrX:EfetuaPagamento( sIndiceForma, 200, "DEVE VOLTAR TROCO", lVinculado )

            // Subtotalizou

            //if ! lCancela; oACBrX:CancelaCupom(); endif


            //?"oACBrX:FechaCupom",;

			lCancela := oACBrX:FechaCupom( "5Volution Fenix|http://5volution.COM.BR" )

            // Subtotalizou

            //if ! lCancela; oACBrX:CancelaCupom(); endif


            //? "oACBrX:MFD",   oACBrX:MFD()

            ? "AliquotaStr"      , oACBrX:AliquotaStr, ;

              "LerTotaisAliquota", oACBrX:LerTotaisAliquota,;

              "Estado"           , oACBrX:Estado     , ;

              "Modelo"           , oACBrX:Modelo     , ;

              "ModeloStr"        , oACBrX:ModeloStr  , ;

              "CNPJ"             , oACBrX:CNPJ       , ;

              "RFDID"            , oACBrX:RFDID

              // "GetDadosUltimaReducaoZ", oACBrX:GetDadosUltimaReducaoZ,;

            ? "oACBrX:NumCupom", oACBrX:NumCupom()   , ;

              "oACBrX:NumCOO"  , oACBrX:NumCOO       , ;

              "oACBrX:NumCRZ"  , oACBrX:NumCRZ()     , ;

              "oACBrX:SubTotal", ;

			sSubtotal := oACBrX:SubTotal


            if MsgYesNo( "Leitura Memoria Fiscal Simplificada?" )

               nRetorno := oACBrX:LeituraMemoriaFiscalReducao( 1, 1, .t. )

            endif


            if MsgYesNo( "Leitura Memoria Fiscal Simplificada em Arquivo?" )

               nRetorno := oACBrX:LeituraMemoriaFiscalArquivoReducao( 1, 1, "c:\reducao.txt", .t. )

            endif


            // nRetorno := oACBrX:CancelaItemVendido( Val(valor) )

            if MsgYesNo( "Deseja cancelar este cupom?" )

               nRetorno := oACBrX:CancelaCupom() // oACBrX:

            endif


            if MsgYesNo( "Deseja imprimir Leitura X?" )

               nRetorno := oACBrX:LeituraX()

            endif


            //if MsgYesNo( "Deseja imprimir Reducao Z?" )

            //   nRetorno := oACBrX:ReducaoZ() // dtoc(date()-1)+" "+time())

            //endif


            //nRetorno := oACBrX:RelatorioGerencial( "teste", 1, "100" )

            //nRetorno := oACBrX:EspelhoMFD_DLLPorCOO("50", "150", "c:\temp\mfd.txt", .t.)


            if MsgYesNo( "Abre Cupom Vinculado?" )

               // O processo do TEF é:

               // 1 - Cupom Fiscal, finalizado com uma Forma de Pagamento que permita Cupons Vinculados (no caso da Bematech somente a 01-Dinheiro nao permite)

               // 2 - Abra o Cupom NAO Fiscal Vinculado...

               // 3 - Imprima as 2 vias do comprovante

               // 4 - Feche o Cupom Nao Fiscal Vinculado

               // 5 - Se nao houver confirmação do Fechamento do Cupom NAO Fiscal Vinculado (queda de energia (simule desligando o ECF)) va ao passo 6 se tudo estiver OK ao passo 12

               // 6 - Emitir msg ao usuário informando o ERRO ao imprimir. Tentar novamente ?

               // 7 - Se SIM, Fechar qq Cupom Fiscal Vinculado ou Relatorio Gerencial que esteja aberto

               // 8 - Abra um relatorio Gerencial

               // 9 - Imprima dentro do Relatorio Gerencial as 2 vias...

               // 10 - Feche o relatorio Gerencial

               // 11 - Se NAO confirmou a impressao, volte ao passo 6

               // 12 - Se tudo OK, Confirmar a impressao correta enviando o CNF ao TEF Discado...

               nRetorno := oACBrX:AbreCupomVinculado( sNCupom, sIndiceForma, sSubtotal )

               // Imprime o texto do TEF

               nRetorno := oACBrX:LinhaCupomVinculado( ' REDECARD'                     )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( 'TERMINAL No. RD000000'         )

               //LinhaCupomVinculado( 'ESTAB. No. 000000009999999'    )

               //LinhaCupomVinculado( '------------------------------')

               //LinhaCupomVinculado( 'MASTERCARD VENDA-CR'           )

               //LinhaCupomVinculado( '5390581381691605'              )

               //LinhaCupomVinculado( 'DATA/HORA VALIDADE'            )

               //LinhaCupomVinculado( '26/11/03 15:53:08 05/09'       )

               //LinhaCupomVinculado( 'AUTENT:'                       )

               //LinhaCupomVinculado( '260007'                        )

               //LinhaCupomVinculado( 'C.V.: AUTORIZ.'                )

               //LinhaCupomVinculado( '7 123456'                      )

               //LinhaCupomVinculado( '------------------------------')

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( '### OPERACAO SIMULADA ###'     )

               //LinhaCupomVinculado( '### NENHUM VALOR SERA ###'     )

               //LinhaCupomVinculado( '### CREDITADO OU DEBITADO ###' )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( 'APROVADO'                      )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( 'VALOR: 1590'                   )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( 'ASSINATURA DO CLIENTE'         )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( 'RECONHECO E PAGAREI A'         )

               //LinhaCupomVinculado( 'DIVIDA AQUI APRESENTADA'       )

               //LinhaCupomVinculado( ''                              )

               //LinhaCupomVinculado( ' (SiTef)'                      )

               //LinhaCupomVinculado( 'Transacao OK'                  )

               // Fecha o Comprovante do TEF

               ? "FechaRelatorio", ; 

               nRetorno := oACBrX:FechaRelatorio()

            endif


         else

            oACBrX:CancelaCupom()

         endif

      endif

      //?"FechaCupom"

      //nRetorno := oACBrX:FechaCupom( "5Volution Fenix|http://5volution.COM.BR" )

      oACBrX:Desativar()

      //oACBrX:ACBr_Destroi() // Desativar()

   //endif


   return nil


DLL32 FUNCTION CancelaCupom(HANDLE As _DOUBLE) AS _INT PASCAL FROM "ECF_CancelaCupom" LIB hDllECF


#pragma BEGINDUMP

        #include 

        #include 

        typedef LONG ( * PDLLREGISTERSERVER ) ( void );

        HB_FUNC( REGISTERSERVER )

        {

           HMODULE hDll = LoadLibrary( hb_parc( 1 ) );

           LONG lReturn = 0;

           if( hDll )

           {

              FARPROC pRegisterServer = GetProcAddress( hDll, "DllRegisterServer" );

              if( pRegisterServer )

                 lReturn = ( ( PDLLREGISTERSERVER ) pRegisterServer )();

              FreeLibrary( hDll );

           }

           hb_retnl( lReturn );

        }        

#pragma ENDDUMP



Function Random( nMaximo )

   static nRandom

   local nTemporal

   nMaximo = if( nMaximo == NIL, 65535, nMaximo )

   if nRandom == NIL

      nRandom = seconds()

   endif

   nTemporal = ( nRandom * seconds() ) % ( nMaximo + 1 )

   nTemporal = if( nTemporal < 1, 1, nTemporal )

   nRandom = nTemporal + seconds()

   RETURN int( nTemporal )


Function VRandom( nIMaximo, nDMaximo )

   static nIRandom, nDRandom

   local nITemporal, nDTemporal

   nIMaximo = if( nIMaximo == NIL, 65535, nIMaximo )

   nDMaximo = if( nDMaximo == NIL, 65535, nDMaximo )

   nIRandom = if( nIRandom == NIL, seconds(), nIRandom )

   nDRandom = if( nDRandom == NIL, seconds(), nDRandom )

   nITemporal = ( nIRandom * seconds() ) % ( nIMaximo + 1 )

   nDTemporal = ( nDRandom * seconds() ) % ( nDMaximo + 1 )

   nIRandom = nITemporal + seconds()

   nDRandom = nDTemporal + seconds()

   RETURN int( nITemporal ) + ( int( nDTemporal ) / 100 )

@braços

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois ...

Alô xmaxmex ...

 

Cara, a versão do ACBrFramework32.dll compilada para STDCALL foi descontinuada

 

Porquê isso?

 

Por que conseguimos uma solução muito elegante e funcional utilizando o ACBrFramework.Net via ActiveX.

Dá uma olhada no outro post sobre o assunto, e baixe o exemplo em VB6 no SVN, vale a pena, pois essa versão dá suporte a todo o componente ECF inclusive a eventos.

 

****

 

Deixo aqui um pedido aos usuários desse projeto, para que por favor participem mais do fórum postando seus problemas, necessidades e modificações feitas no projeto, pois só assim poderemos incorporar as mudanças ao SVN.

É o terceiro caso recente de usuário que utiliza alguma versão modificada da antiga do ACBr32.dll que não é mais compatível com o projeto atual que mantemos no SVN.

Lembrando que o ACBrFramework atual dá suporte a dezenas de componentes (não só ao ECF como o ACBr32.dll), se concentrarmos os esforços, todos serão beneficiados.

 

Abs!

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link para o comentário
Compartilhar em outros sites

Ok Rafael entendi,

 

Mas bem que voce poderia ter pego as chamadas que fiz para a ActiveX (acima), pois voces só fizeram as entradas da nova DLL...

E os eventos e propriedades do ActiveX ??

 

No Vb6 o FrameWork esta praticamente em estado Zero !

 

Fico no aguardo.


 

Link para o comentário
Compartilhar em outros sites

@xmaxmex

Se você ler sobre o interop feito para vb6, vai ver q o projeto no vb6 tem todas as funções do ECF, tudo que foi inserido no ECF do ACBrFramework.Net esta disponivel para uso no VB6 atraves do COMInterop.

Então no estado Zero não esta.  Antes de postar novamente leia o topico abaixo.

 

 

Baixe no svn a versão nova do projeto. Não sei se você ja mudou o endereço do seu svn, mas abaixo tem o novo svn do projeto.

 

https://acbr.svn.sourceforge.net/svnroot/acbr/ACBrFramework

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 4079 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.