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;