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
szField := Concat('$04', '$02'); AddMessageField(PAnsiChar(szField), 2);
szField := Concat('$00', '$00'); AddMessageField(PAnsiChar(szField), 2);
r := SendSerialMessage;
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;