Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ejemplo en VB para convertir a Delphi (https://www.clubdelphi.com/foros/showthread.php?t=92912)

freynoso 12-03-2018 23:24:14

Ejemplo en VB para convertir a Delphi
 
Hola a todos.

Tengo una situación un poco crítica. Puede alguno ayudarme a reescribir este procedimiento en Delphi?

Private Sub Command1_Click()
Dim sAux As String
Dim lAux As Long
Dim lreturn As Long

Const FLD_XNUMBER = 6

sAux = Chr$(&H4) & Chr$(&H2)
AddField sAux
sAux = Chr$(&H0) & Chr$(&H0)
AddField sAux
Call SendCommand
'Initialize string

sAux = Space(10)

'Debug to check answer
'no time out. just for debugging
lreturn = 1

lreturn = GetMessageField(sAux, lAux, FLD_XNUMBER)
DoEvents

MsgBox (sAux)

End Sub


Funciona perfectamente en VB. He hecho de todo pero en Delphi no me funciona.

Muy agradecido anticipadamente.

Saludos.

Fabio.

Casimiro Notevi 13-03-2018 08:40:02

Cita:

Empezado por freynoso (Mensaje 525058)
He hecho de todo pero en Delphi no me funciona.

A ver qué has hecho en Delphi y por qué no funciona.

PS: Y no olvides poner las etiquetas para el código.


freynoso 13-03-2018 14:23:08

Antes de seguir, agradezco mucho de antemano la ayuda que me puedan brindar.

Esto es lo que he hecho, probado, cambiado, intentado...

La idea es que al utilizar una librería dll poder conectarme a una impresora fiscal para obtener configuración (para uso de seguridad de la aplicación) y en lo adelante poder generar documentos de venta, no venta, etc. Lo comentado es lo que he ido omitiendo.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var OpenSerialPort: function(wCommNumber : Word; dwBaudRate : LongWord) : LongWord; stdCall;
    AddMessageField:function(szField : AnsiString; dwFieldLength : LongWord) : LongWord; stdCall;
    GetMessageField: function(szField: AnsiString; dwFieldLength : LongWord; lAnsweredField: Long) : LongWord; stdCall;
    SendSerialMessage : function: LongWord; stdCall;
    PurgeMessage:function: LongWord; stdCall;
    CloseSerialPort : function: LongWord; stdCall;
    Lib: THandle;
    r : LongWord;
    szField : AnsiString;
    sAux : AnsiString;
    lAux : LongWord;
begin
  Lib := LoadLibrary('EpsonFiscalProtocol.dll');
  @OpenSerialPort := GetProcAddress(Lib, 'OpenSerialPort');
  if Assigned(@OpenSerialPort) then
  begin
    r := OpenSerialPort(3, 9600);
    try
    if r <> 0 then
      ShowMessage('Error al abrir el puerto 3')
    else
    begin
      @AddMessageField := GetProcAddress(Lib, 'AddMessageField');
      @SendSerialMessage := GetProcAddress(Lib, 'SendSerialMessage');
      @GetMessageField := GetProcAddress(Lib, 'GetMessageField');
      if Assigned(@AddMessageField) then
      begin
        //SetLength(szField, 4);

        szField := Concat('$04', '$02');//StrToInt(Format('%s', ['0x04']));
//        szField[1] := Chr(2);//StrToInt(Format('%s', ['0x02']));
        AddMessageField(PAnsiChar(szField), 2);

        szField := Concat('$00', '$00');//StrToInt(Format('%s', ['0x00']));
//        szField[1] := Chr(0);//StrToInt(Format('%s', ['0x00']));
        AddMessageField(PAnsiChar(szField), 2);

        r := SendSerialMessage;

//        Sleep(500);

        r := GetMessageField(sAux, lAux, 6);

        ShowMessage(sAux + IntToStr(lAux));

      end;
    end;
    finally
      @CloseSerialPort := GetProcAddress(Lib, 'CloseSerialPort');
      if Assigned(@CloseSerialPort) then
        r := CloseSerialPort;
      FreeLibrary(Lib);
    end;
  end;

end;

Casimiro Notevi 13-03-2018 14:36:51

Ummm... pero para usar una impresora epson no necesitas convertir de VB.
Haz una búsqueda por los foros, es un tema que se ha tratado varias veces.

freynoso 13-03-2018 15:00:58

He buscado en el forum, sin embargo no he encontrado ningún ejemplo con el formato correcto para enviarle los comandos a la impresora fiscal. El ejemplo que colgué al principio viene con la documentación de la impresora y he intentado varias formas de enviarle los comandos en delphi, pero nada aún. El ejemplo en VB funciona, por eso he querido ver si se puede convertir o transcribir.

Por cierto, disculpa que no he dado muchos detalles. Es para trabajar con impresoras fiscales en República Dominicana.

gatosoft 14-03-2018 15:26:41

La función GetProcAddress devuelve un método, así que bastaría con:

Código Delphi [-]
OpenSerialPort := GetProcAddress(Lib, 'OpenSerialPort');
if Assigned(OpenSerialPort) then
(sin la arroba)


La franja horaria es GMT +2. Ahora son las 22:15:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi