88 lines
2.3 KiB
ObjectPascal
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.
|