Ir para conteúdo
Fórum Script Brasil
  • 0

Pin Pad


Guest - Marcelo -

Pergunta

Guest - Marcelo -

Olá amigos, Estou acessando uma DLL que se comunica com um PIN-Pad Magic 1800 da schlumberger.

As funções que abrem e fecham a comunicação pela serial estão funcionando legal, mas as funções que tem parâmetros de retorno, como essa função de estou questionando, estão causando \"access violation\" na DLL, vale dizer que os três primeiros parâmetro são de entrada e o restante de saída... Não sei se por isso está causando o erro.

A função é a seguinte:

function PPW_iGetCard(var psTimeOut,psPayMode,psDate,psTrack1,psTrack2, psExtCardNo,psName,psTrk1DiscData,psCardType,psFlags,

psPIX,psldCred:Pchar):integer;stdcall;external 'ppw32.dll';

Obrigado desde já, fico à disposição

Meu e-mail: martctoller@yahoo.com.br

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

opa

eu nunca mexi com isso não, mas acho que talvez o erro seja como você

está passando os parâmetros pra DLL...

procurei na net sobre, mas realmente é algo pouco discutido, alias a maior

parte do que aparece é seus posts em outros fóruns ehehe

cara da uma olhada nessa biblioteca, não sei se você já a tem -> Link

é uma biblioteca completa para acesso a esse pin-pad magic 1800, está escrita

em C, mas se não souber como passar para delphi a gente te da uma força...

Na pasta Misc\ tem uma fonte com várias funções incluindo essa sua, que está declarada

lá como iGetCard

Na pasta Include\ está os cabeçalhos

Possui até as dlls pra 16 e 32 bits...

qualquer coisa posta ai

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Marcelo -

Olá Carlos, obrigado pelo interesse!!

Estou desenvolvendo para TRN center (Novarts) e a comunicação esta sem problema nenhum uso a dll ppw32.dll, o problema é quando vou mover os valores (como numero do cartão por exemplo..) para as variaveis para que seja exibida por exemplo num edit ou memo

Tenho essa função:

function PPW_iGetCard(var psTimeOut,psPayMode,psDate,psTrack1,psTrack2,

psExtCardNo,psName,psTrk1DiscData,psCardType,psFlags,

psPIX,psldCred:Pchar):integer;stdcall;external 'ppw32.dll';

Ao ler o cartão faço uma váriavel(VL_R:integer) receber o result dessa função com as variáveis que criei todas do tipo pchar

VL_R:=PPW_iGetCard(VL_TimeOut,VL_Mode,VL_Data,VL_Track1,VL_Track2,

VL_CardNo,VL_Name,VL_DiscData,VL_CardType,VL_Flag,VL_PIX,VL_Cred);

A VL_R recebe 0 (que esta correto)

Após ler o cartão tento mover para um memo..

Memo1.Lines.Clear;

Memo1.Lines.Add('VL_Track1: '+VL_Track1);

E é aqui que ocorre o access violation, como se não conseguisse ler a variável, já tentei usar outros tipos de variaveis e não adiantou..

Memo1.Lines.Add('VL_Track2: '+VL_Track2);

Memo1.Lines.Add('VL_CardNo: '+VL_CardNo);

Memo1.Lines.Add('VL_Name: '+VL_Name);

Memo1.Lines.Add('VL_DiscData: '+VL_DiscData);

Memo1.Lines.Add('VL_CardType: '+VL_CardType);

Memo1.Lines.Add('VL_Flag: '+VL_Flag);

Memo1.Lines.Add('VL_PIX: '+VL_PIX);

Memo1.Lines.Add('VL_Cred: '+VL_Cred);

Agradeço qualquer ajuda e fico a disposição se precisar de qualquer coisa

se tiver alguma luz pode mandar p/meu e-mail - marctoller@yahoo.com.br

Mais uma vez obrigado..

Link para o comentário
Compartilhar em outros sites

  • 0

opa

bom então o erro não acontece na função de leitura e sim

na hora de ler as variavéis?

pra saber isso fácil ao invés de carregar a DLL estaticamente

carregue ela dynamicamente, e se der erro na função de

carregamento então o erro está na leitura da DLL caso contrário

o erro está no .exe mais precisamento nas variaveis recebidas...

uma besteira, mas pra mudar o tipo da variavel, de PChar pra

String (Typecast) tenta usar StrPas exemplo

Memo1.Lines.Add('VL_Track2: '+StrPas(VL_Track2));

Memo1.Lines.Add('VL_CardNo: '+StrPas(VL_CardNo));

Memo1.Lines.Add('VL_Name: '+StrPas(VL_Name));

Memo1.Lines.Add('VL_DiscData: '+StrPas(VL_DiscData));

Memo1.Lines.Add('VL_CardType: '+StrPas(VL_CardType));

Memo1.Lines.Add('VL_Flag: '+StrPas(VL_Flag));

Memo1.Lines.Add('VL_PIX: '+StrPas(VL_PIX));

Memo1.Lines.Add('VL_Cred: '+StrPas(VL_Cred));

engraçado que naquela biblioteca que falei acima, algumas

variavéis são trabalhadas primeiro antes de serem passadas

pra função principal...

if (!fGetValue ("iTimeOut", &lTimeOut))

return (APP_CANCEL);

if (!fGetSel ("iPayMode", gvpszPayMode, &iPayMode))

return (APP_CANCEL);

if (!fGetString ("pszDate (AAAAMMDD)", 8, GETS_FIXEDLEN|GETS_NOSZ, gszDate))

return (APP_CANCEL);

Link para o comentário
Compartilhar em outros sites

  • 0

Churc, permita-me uma parte aqui, apenas para melhor esclarecimento...

Ao ler o cartão faço uma váriavel(VL_R:integer) receber o result dessa função com as variáveis que criei todas do tipo pchar
Marcelo, essas variáveis PCHAR criadas foram simplesmente assim definidas na cláusula VAR? Voce está reservando (alocando) espaço para elas?

[]s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...