xtool/imports/BrunsliDLL.pas

88 lines
2.3 KiB
ObjectPascal

unit BrunsliDLL;
interface
uses
WinAPI.Windows,
System.SysUtils, System.Classes;
const
BRUNSLI_OK = 0;
BRUNSLI_NON_REPRESENTABLE = 1;
BRUNSLI_MEMORY_ERROR = 2;
BRUNSLI_INVALID_PARAM = 3;
BRUNSLI_COMPRESSION_ERROR = 4;
BRUNSLI_INVALID_BRN = 5;
BRUNSLI_DECOMPRESSION_ERROR = 6;
BRUNSLI_NOT_ENOUGH_DATA = 7;
type
TBrunsliWriter = function(ctx: Pointer; data: Pointer; Size: NativeUInt)
: Integer cdecl;
var
brunsli_alloc_JPEGData: function: Pointer cdecl;
brunsli_free_JPEGData: procedure(P: Pointer)cdecl;
brunsli_GetMaximumEncodedSize: function(P: Pointer): Integer cdecl;
brunsli_ReadJpeg: function(P: Pointer; data: Pointer; len: Integer)
: Integer cdecl;
brunsli_EncodeJpeg: function(P: Pointer; data: Pointer; len: Integer)
: Integer cdecl;
brunsli_DecodeJpeg: function(P: Pointer; data: Pointer; len: Integer)
: Integer cdecl;
brunsli_alloc_JPEGOutput: function(P: TBrunsliWriter; data: Pointer)
: Pointer cdecl;
brunsli_free_JPEGOutput: procedure(P: Pointer)cdecl;
brunsli_WriteJpeg: function(P: Pointer; oup: Pointer): Integer cdecl;
DLLLoaded: Boolean = False;
implementation
var
DLLHandle: THandle;
S: String;
procedure Init;
begin
S := 'brunsli.dll';
DLLHandle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + S));
if DLLHandle >= 32 then
begin
@brunsli_alloc_JPEGData := GetProcAddress(DLLHandle,
'brunsli_alloc_JPEGData');
@brunsli_free_JPEGData := GetProcAddress(DLLHandle,
'brunsli_free_JPEGData');
@brunsli_GetMaximumEncodedSize := GetProcAddress(DLLHandle,
'brunsli_GetMaximumEncodedSize');
@brunsli_ReadJpeg := GetProcAddress(DLLHandle, 'brunsli_ReadJpeg');
@brunsli_EncodeJpeg := GetProcAddress(DLLHandle, 'brunsli_EncodeJpeg');
@brunsli_DecodeJpeg := GetProcAddress(DLLHandle, 'brunsli_DecodeJpeg');
@brunsli_alloc_JPEGOutput := GetProcAddress(DLLHandle,
'brunsli_alloc_JPEGOutput');
@brunsli_free_JPEGOutput := GetProcAddress(DLLHandle,
'brunsli_free_JPEGOutput');
@brunsli_WriteJpeg := GetProcAddress(DLLHandle, 'brunsli_WriteJpeg');
DLLLoaded := Assigned(brunsli_alloc_JPEGData) and
Assigned(brunsli_alloc_JPEGOutput);
end
else
DLLLoaded := False;
end;
procedure Deinit;
begin
if not DLLLoaded then
exit;
FreeLibrary(DLLHandle);
end;
initialization
Init;
finalization
Deinit;
end.