Ver Mensaje Individual
  #3  
Antiguo 13-03-2018
freynoso freynoso is offline
Registrado
 
Registrado: oct 2006
Posts: 5
Reputación: 0
freynoso Va por buen camino
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;
Responder Con Cita