Inquiridor
Incompatibilidade da Daruma32.dll com Delphi 2009

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 só 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á.
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
-
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 -
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- Editado Jean Paul Banna quinta-feira, 23 de abril de 2009 18:14
-
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 -
-
-
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 -
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
Estou tendo o mesmo problema com a dll da Daruma, você conseguiu resolver ou teve que voltar para o Delphi 7.
Genilson. -