Fórum Passagem de parâmetros #350192
06/12/2007
0
Minha DLL exporta uma função com a seguinte assinatura:
function NumeroSerie(ANumeroSerie: string): Integer; stdcall;
A DLL existente chama esse método que exporto e eu me encarrego de chamar o método do fabricante correto. Com a Bematech e Daruma tudo funciona OK. Mesmo sem usar VAR na passagem de parâmetro, o número de série vem para a DLL chamadora. Não sei como, se alguem puder responder ficaria grato.
Meu problema está no caso da Epson. Para retornar o número de série do exemplo, tenho que fazer outras operações e para retornar o número de série teria que passar o parâmetro por referência e não por valor.
Alguem pode me indicar um caminho.
TECF = class function NumeroSerie(ASerie: string): Integer; end; TBematech = class(TECF) function NumeroSerie(ASerie: string): Integer; end; TDaruma = class(TECF) function NumeroSerie(ASerie: string): Integer; end; // Aqui não funciona, pois para achar o número de série // tenho q fazer outras operações, ao contrários // das outras dll´s onde eu chamo o método direto // e passo o parâmetro ASerie. TEpson = class(TECF) function NumeroSerie(ASerie: string): Integer; end;
Rjun
Curtir tópico
+ 0Posts
06/12/2007
Bruno Belchior
Gostei + 0
06/12/2007
Edilcimar
Vamos supor que esta impressora retorne
x:= ´abd1234567kitr00379´, onde isto poderia significar que o 121345 fosse o número de série, o abd fosse informações de erro, o kitr e o 00379 fossem outras informações
Gostei + 0
06/12/2007
Rjun
Exemplo:
function Bematech_FI_NumeroSerie(Serie: string): Integer; stdcall; external ´BemaFI32.dll´ function TClasse.NumeroSerie(Serie: string): integer; begin result := Bematech_FI_NumeroSerie(Serie); end;
Desse jeito funciona, mesmo eu não usando VAR na passagem de parâmetro. O problema é pra Epson. Como não existe uma função igual a da Bematech, eu tenho q chamar outra função e com o retorno dela encontrar o número de série. O problema é passar para a função chamadora sem usar o VAR.
Gostei + 0
06/12/2007
Rjun
Gostei + 0
06/12/2007
Edilcimar
Procedure Analisa_Retorno;
e verá que ela retorna
Ret, ACK, ST1 e ST2
onde você terá que decifrar isto para saber qual foi a resposta da impressora
Gostei + 0
06/12/2007
Bruno Belchior
Gostei + 0
07/12/2007
Edilcimar
Gostei + 0
07/12/2007
Rjun
Eu tentei assim agora:
Defini a função que exporta da seguinte maneira:
// Declaração function NumeroSerie(var ANumeroSerie: string): Integer; stdcall; export // Método function NumeroSerie(var ANumeroSerie: string): Integer; begin result := ECF.NumeroSrie(ANumeroSerie); end;
Só que no momento da chamada da função, eu coloco um Watch para o ANumeroSerie eu não consigo ver o valor da variavel. Se eu tento atribuir algum valor para ANumeroSerie, dá uma exceção.
Lembrando que eu não posso alterar a DLL chamadora.
Gostei + 0
07/12/2007
Edilcimar
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)