powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Callback функция для установки crypt key вызывается два раза в Delphi
3 сообщений из 28, страница 2 из 2
Callback функция для установки crypt key вызывается два раза в Delphi
    #39731702
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonal,

по поводу fbcrypt.dll, ответ наших разработчиков:
"Попросили Пешкова сделать fbcrypt.dll. Смысл в том что при установки callback функции ей в качестве аргумента надо было передавать типы, уникальные для Firebird'a (если не ошибаюсь, как минимуму ключи как UCharBuffer), что приводит к необходимости цеплять кучу include файлов из проекта FB и поддерживать их в актуальном состоянии. Предлагаемая дллка принимает на вход стандартизированные типы (указатель, размер) что позволяет использовать её даже в тех проектах, в которых не могут быть реализованы типы Firebird."

Так что, не такая уж она и "нестандартная". А насчет ее включения в дистрибутив - вероятно, согласуем и включим.
...
Рейтинг: 0 / 0
Callback функция для установки crypt key вызывается два раза в Delphi
    #39732127
rasslabone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladrasslaboneв случае передачи handle после вызова fb_get_database_handle чем-то заполнилась переменная dbhandleЧем ?

rasslaboneпосле установки через gRadugaDatabase.SetHandle соединение не установилосьЧто значит - не установилось ? Оно уже установлено.
Да, Вы были правы насчет динамической загрузки. Спасибо hvlad и Dimitry Sibiryakov за помощь.
Выкладываю рабочий код, может кому-то пригодиться:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
type
ISC_STATUS_ARRAY=Array [0..19] of ISC_STATUS;
Tfb_database_crypt_callback = function ( status_vector: PISC_STATUS; cryptKeyCallback: ICryptKeyCallback ):ISC_STATUS;stdcall;

CryptKey = class(ICryptKeyCallbackImpl)
function callback(dataLength: Cardinal; data: Pointer; bufferLength: Cardinal; buffer: Pointer): Cardinal; override;
end;

var
  gRadugaDatabase: TIBDatabase;
  status:ISC_STATUS_ARRAY;


procedure CallFb_database_crypt_callback(status_vector: PISC_STATUS; cryptKeyCallback: ICryptKeyCallback);
  var
  hndDLLHandle: THandle;
  fb_database_crypt_callback: Tfb_database_crypt_callback;
begin
  try
    // загружаем dll динамически
    hndDLLHandle := LoadLibrary ( 'gds32.dll' );

    if hndDLLHandle <> 0 then
    begin
      // получаем адрес функции
      @fb_database_crypt_callback := getProcAddress ( hndDLLHandle,'fb_database_crypt_callback' );
      // если адрес функции найден
      if addr ( fb_database_crypt_callback ) <> nil then
      begin
       fb_database_crypt_callback (status_vector,cryptKeyCallback);
       gRadugaDatabase.Open;
      end
      else
        showMessage ( 'Function not exists...' );
    end
    else
      showMessage ( 'DLL not found...' );
  finally
    freeLibrary ( hndDLLHandle );
  end;
end;

//Вызов 
 	gRadugaDatabase.Connected := False;
        gRadugaDatabase.DatabaseName := BasePath;
        gRadugaDatabase.Params.Clear;
        gRadugaDatabase.Params.Add('user_name=' + Login);
        gRadugaDatabase.Params.Add('password=' + Password);
        gRadugaDatabase.Params.Add('lc_ctype=WIN1251');
 	CallFb_database_crypt_callback(@status,CryptKey.create);
...
Рейтинг: 0 / 0
Callback функция для установки crypt key вызывается два раза в Delphi
    #39734365
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Никакого UCharBuffer для реализации не нужно.
В сообщении 21732517 rasslabone привёл работающий код.
Из уникальных для Firebird'a типов используется только ICryptKeyCallback и обёртка над ним.
Ежели его не использовать, то понадобится или уникальная для fbcrypt.dll реализация калбека, либо установка фиксированных буферов для ключей - что не позволяет проводить дополнительные проверки на этапе коннекта.

Ну и закрытость исходников и платность фреймворка тоже играет в минус.
...
Рейтинг: 0 / 0
3 сообщений из 28, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Callback функция для установки crypt key вызывается два раза в Delphi
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]