El problema está en el tamaño de la cadena. Prueba de esta forma:
Código Delphi
[-]
type
TConsultarVersionDll = function ( descripcion : PAnsiChar; descripcion_largo_maximo: LongInt; var mayor : LongInt; var menor : LongInt) : LongInt; StdCall;
var
dll : THandle;
error : LongInt;
str : Array[0..200] of AnsiChar;
mayor : LongInt;
menor : LongInt;
ConsultarVersionDll: TConsultarVersionDll;
begin
dll := 0;
dll := LoadLibrary('EpsonFiscalInterface.dll');
if dll = 0 then
begin
ShowMessage('Error al instanciar DLL');
Exit;
end;
@ConsultarVersionDll := GetProcAddress(dll, 'ConsultarVersionDll');
if not Assigned(ConsultarVersionDll) then
begin
ShowMessage('Error al asignar funcion: ConsultarVersionDll');
Exit;
end;
mayor:= 0;
menor:= 0;
error := ConsultarVersionDll(@str[0], 200, mayor, menor );
ShowMessage( str );
ShowMessage( IntToStr(mayor) );
ShowMessage( IntToStr(menor) );
ShowMessage( IntToStr(error) );
FreeLibrary(dll);
end;
También puedes hacerlo de forma estática de esta forma:
Código Delphi
[-]
function ConsultarVersionDll(descripcion: PAnsiChar; descripcion_largo_maximo: LongInt; var mayor : LongInt; var menor : LongInt): LongInt; stdcall; external 'EpsonFiscalInterface.dll';
var
error : LongInt;
str : Array[0..200] of AnsiChar;
mayor : LongInt;
menor : LongInt;
begin
ConsultarVersionDll(str, 200, mayor, menor);
ShowMessage(Str +#13 + 'Mayor: '+ IntToStr(mayor) + #13 + 'Menor: ' + IntToStr(menor));
end;
Saludos.