Example:
type
IKeyCallback = class(ICryptKeyCallbackImpl)
private
fKey : String;
function callback(dataLength: Cardinal; data: Pointer; bufferLength: Cardinal; buffer: Pointer): Cardinal; override;
end;
function IKeyCallback.callback(dataLength: Cardinal; data: Pointer; bufferLength: Cardinal; buffer: Pointer): Cardinal;
Var b:TBytes;
begin
b:=TEncoding.ASCII.GetBytes(fKey);
If (bufferLength > 0) and (buffer <> nil) then begin
Result := Length(b);
Move(b[0],buffer^,Result);
end else
Result := 0;
end;
{
function TFXClientLibrary.Call_attach_database(Const db_name,db_crypt_key:String;Const db_handle:PISC_DB_HANDLE;Const parm_buffer_length:FXShort;Const parm_buffer:PFXByte): ISC_STATUS;
Var key:IKeyCallback;
cb:Pointer ABSOLUTE key;
lDBN:FXShort;
sDBN:TBytes;
Begin
sDBN := TEncoding.Convert(TEncoding.Default, TEncoding.ANSI, BytesOf(db_name));
lDBN := length(sDBN);
if (db_crypt_key<>EmptyStr)and(Assigned(fdatabase_crypt_callback)) then Begin
key:=IKeyCallback.create;key.fKey:=db_crypt_key;
Result:=fdatabase_crypt_callback(@fStatusVector,cb);
if Result>0 Then
Exit;
end;
Result:=fisc_attach_database( @fStatusVector,
lDBN,
PFXByte(sDBN),
db_handle,
parm_buffer_length,
parm_buffer
);
// key is released
end;



