602SQL-Úplná dokumentace Index  

Příklad volání funkcí v externí DLL na serveru

Vytvoříme funkci, která na 602SQL serveru smaže určenou hodnotu z určeného klíče v registru Windows. Ke smazání hodnoty je třeba zpřístupnit 3 funkce ze systémové knihovny ADVAPI32.DLL.

function RegOpenKeyEx(IN hKey INT, INOUT lpSubKey CHAR(100),
  IN ulOptions INT, IN samDesired INT, OUT phkResult INT) returns int;
external name 'RegOpenKeyExA@advapi32.dll';

function RegCloseKey(IN hKey INT) returns int;
external name 'RegCloseKey@advapi32.dll';

function RegDeleteValue(IN hKey INT, INOUT lpValueName CHAR(100)) 
  returns int;
external name 'RegDeleteValueA@advapi32.dll';

Funkce RegOpenKeyEx a RegDeleteValue jsou v knihovně ADVAPI32.DLL s písmenem A na konci jména, což indikuje, že jejich řetězcové parametry používají 8-bitové znaky. Knihovnu ADVAPI32.DLL je třeba zpřístupnit pro 602SQL server. Protože není bezpečné povolit volání knihoven ze systémového adresáře Windows, kde se tato knihovna normálně nachází, je lepší:

  1. zkopírovat tuto knihovnu do jiného adresáře ADR,
  2. ve třech výše uvedených funkcích uvést plnou cestu k této knihovně v adresáři ADR,
  3. přidat ADR do seznamu adresářů, v nichž je dovoleno používat externí knihovny.

Funkce, která smaže hodnotu z registru, může vypadat takto:

function Delete_value_in_reg_LM(IN key_name CHAR(100), 
  IN value_name CHAR(100)) 
  returns int;
BEGIN
  declare HKEY_LOCAL_MACHINE int default -2147483646;
  declare KEY_ALL_ACCESS int default 983103;
  declare hSubKey int;
  declare res int;
  SET res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, key_name, 0, 
    KEY_ALL_ACCESS, hSubKey);
  if res=0 then
    SET res=RegDeleteValue(hSubKey, value_name);
    call RegCloseKey(hSubKey);
  end if;
  return res;
END

Tato verze je určena pouze pro mazání v sekci Local Machine.