none
Incompatibilidade da Daruma32.dll com Delphi 2009 RRS feed

  • Pergunta

  • Estou desenvolvendo um PDV com a ECF FS600 em Delphi 2009. Como eu só comecei a criar a parte específica de vendas depois de ter recebido a minha impressora para desenvolvedor, eu não tinha idéia do problema que teria.
    O programa consegue abrir um cupom tranqüilamente. No entanto, ao tentar vender um item (Daruma_FI_VendeItem), ocorre um erro:

    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Teste7.exe raised exception class EAccessViolation with message 'Access violation at address 100C7FF7 in module 'daruma32.dll'. Write of address 0046CB78'.
    ---------------------------
    Break   Continue   Help  
    ---------------------------

    Infelizmente, esse erro acontece nas versões 2006, 2007 e 2009 do Delphi. Pois foi nessas versões que eu tentei recriar o problema. Inclusive com uma nova instalação do Windows (XP SP2, SP SP3, Vista e até o Windows 7). O aplicativo funciona perfeitamente, em qualquer versão do Delphi e do Windows, até que se tente vender um item.
    Eu não consigo nem mesmo analisar o retorno da função, pois ela nem mesmo executa.

    Pois bem, para tirar o peso da consciência, resolvi baixar e instalar o Delphi 7. Claro, não vou conseguir portar a minha aplicação de volta a esta versão, mas posso recriar o código que vende um item na impressora. Fiz isso e funcionou perfeitamente!
    A partir daí só pude pensar em incompatibilidade da DLL com a forma como o aplicativo compilado em Delphi 2009 chama esta DLL.

    Tentei descobrir algo no fórum da CodeGear, mas não encontrei nada parecido com isso.

    Eu gostaria de alguma ajuda neste problema, pois é o ponto central do sistema e preciso entregá-lo até o final da semana.
    Se não houver uma solução simples, terei que fazer o downgrade, não só desta, mas de várias aplicações.

    Agradeço desde já.
    segunda-feira, 20 de abril de 2009 01:13

Todas as Respostas

  • Gostaria de adicionar o seguinte: O Delphi2009 utiliza Unicode como tipo String padrão. Imagino que a Daruma32.dll utilize PChar internamente e nos parâmetros.

    Segundo funcionários da CodeGear, seria necessário recompilar a DLL e o aplicativo utilizador com o tipo PAnsiChar, no Delphi2009. Ainda, segundo ele, se eu tentar utilizar uma DLL qualquer que utilize PChar, diversos erros podem ocorrer, pois o tipo padrão PChar agora é equivalente a PWideChar.

    Podem, por favor, confirmar isso? Ou fazer um teste?
    • Sugerido como Resposta Jean Paul Banna quinta-feira, 23 de abril de 2009 18:22
    segunda-feira, 20 de abril de 2009 16:44
  • Olá Jean, boa noite!

    Tivemos outro desenvolvedores com esse mesmo problema,  mas enquanto não temos a solução definitiva para o problema.

    Será que é possível você enviar um email com seu telefone de contato para que eu possa te ajudar?

    Meu email é: suporte.desenvolvedores@daruma.com.br

    Fico no aguardo do seu retorno.

    T+

    Ana Paula Ribeiro da Costa |  Analista Líder  -  Integração e Desenvolvimento -  Daruma Developers Community |

    Urmet Daruma - Av. Paulista 1776, 16o. andar - conj. A  - São Paulo - CEP 01310-200  

    Skype: suporte_desenvolvedores_daruma  | Ligação Gratuita.: 0800 770 332 0

    Site: www.desenvolvedoresdaruma.com.br



    Ana Paula
    quinta-feira, 23 de abril de 2009 00:26
  • Boa tarde, Ana.

    Então, estive fazendo umas alterações hoje e consegui resolver o problema da função Daruma_FI_VendeItem. Só precisei mudar sua declaração e de todas as variáveis passadas para ela como AnsiString. Ficando assim:

    function Daruma_FI_VendeItem(Cod: AnsiString; Desc: AnsiString; Aliq: AnsiString; Tipo_Quant: AnsiString;
    Quant: AnsiString; Decimais: Integer; ValorUnit: AnsiString;
    TipoDesc: AnsiString; ValDesc: AnsiString): Integer; stdcall; external 'daruma32.dll';

    No código que vende o item, é preciso ter 8 variáveis do tipo AnsiString para armazenar os valores a serem passados para a função. Além disso, na chamada à função, é preciso converter cada um dos parâmetros passados com PAnsiChar(). Assim:

    var
    cod, desc, aliq, tipo_quant, quant, custo, tipo_desc, val_desc: AnsiString;
    RetFunc: Integer;
    begin
    ...
    RetFunc:= Daruma_FI_VendeItem(PAnsiChar(cod), PAnsiChar(desc),
    PAnsiChar(aliq), PAnsiChar(tipo_quant),
    PAnsiChar(quant), 2,
    PAnsiChar(custo), PAnsiChar(tipo_desc),
    PAnsiChar(val_desc));
    ...
    end;

    Consegui isso depois que recebi uma ligação do suporte. É preciso ter certeza de que todas as variáveis são AnsiString e de que todas são convertidas  para PAnsiChar na hora de passá-las para a função.

    No entanto, agora, estou tendo o mesmo erro com a função Daruma_FI_RetornarVersaoDLL. Neste caso, mesmo mudando o tipo do parâmetro para AnsiString, não consigo evitar o erro.

    Agradeço o contato. Quaisquer informações que tiver podem ajudar.

    Jean Paul Banna
    Analista/Desenvolvedor - NaejSoft
    (12)3411-0693 - 12h30 às 13h45
    jeanpaulbanna@ig.com.br
    quinta-feira, 23 de abril de 2009 18:07
  • Show de bola Jean!!


    Você falou com a Jéssica, precisando conte conosco.

    T+


    Ana Paula Ribeiro da Costa |  Analista Líder  -  Integração e Desenvolvimento -  Daruma Developers Community |

    Urmet Daruma - Av. Paulista 1776, 16o. andar - conj. A  - São Paulo - CEP 01310-200  

    Skype: suporte_desenvolvedores_daruma  | Ligação Gratuita.: 0800 770 332 0

    Site: www.desenvolvedoresdaruma.com.br


    Ana Paula
    quinta-feira, 23 de abril de 2009 18:11
  • Jéssica, isso. :P

    Obrigado de novo.
    quinta-feira, 23 de abril de 2009 18:21
  • Ah sim, então. E quanto ao problema da Daruma_FI_RetornarVersaoDLL?
    quinta-feira, 23 de abril de 2009 18:22
  • Oi Jean,

    Você pode explicar o problema que encontrou no método Daruma_FI_RetornarVersaoDll?


    Como você reportou que é melhor contato por email, assim dessa forma agilizamor o suporte.

    T+

    Ana Paula Ribeiro da Costa |  Analista Líder  -  Integração e Desenvolvimento -  Daruma Developers Community |

    Urmet Daruma - Av. Paulista 1776, 16o. andar - conj. A  - São Paulo - CEP 01310-200  

    Skype: suporte_desenvolvedores_daruma  | Ligação Gratuita.: 0800 770 332 0

    Site: www.desenvolvedoresdaruma.com.br


    Ana Paula
    sexta-feira, 24 de abril de 2009 01:33
  • Oi Jean,

    Você pode explicar o problema que encontrou no método Daruma_FI_RetornarVersaoDll?


    Como você reportou que é melhor contato por email, assim dessa forma agilizamor o suporte.

    T+

    Ana Paula Ribeiro da Costa |  Analista Líder  -  Integração e Desenvolvimento -  Daruma Developers Community |

    Urmet Daruma - Av. Paulista 1776, 16o. andar - conj. A  - São Paulo - CEP 01310-200  

    Skype: suporte_desenvolvedores_daruma  | Ligação Gratuita.: 0800 770 332 0

    Site: www.desenvolvedoresdaruma.com.br


    Ana Paula
    Olá Jean,
    Estou tendo o mesmo problema com a dll da Daruma, você conseguiu resolver ou teve que voltar para o Delphi 7.

    Genilson.
    quinta-feira, 12 de novembro de 2009 14:17
  • Olá Jean;

    Nos rertornos da dll Daruma substitua "Pchar" por "Pansichar"

    Att;
    Genilson.

    quinta-feira, 12 de novembro de 2009 14:23