Bonjour !

J'ai voulu essayer d'utiliser l'unité RegEdit de Paul TOTH avec Virtual Pascal.

L'unité se compile (avec la directive {$H+}), mais elle ne fonctionne pas. (Pour information, avec Free Pascal elle se compile et fonctionne correctement.)

J'ai fait un petit programme indépendant avec le code de la fonction ReadRegString pour essayer de comprendre ce qui se passe. Auriez-vous une idée ?

Une erreur à la compilation est plus facile à corriger. Là, je ne sais pas trop de quel côté chercher.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
51
52
program TestReadRegString;
 
{ Code extrait de l'unité RegEdit de Paul TOTH :
  http://tothpaul.free.fr/sources.php?tools.units
  
  Essai d'adaptation pour Virtual Pascal.
}
 
{$PMTYPE VIO}
{$H+}
{$USE32+}
 
uses
  Windows;
 
var
  key: HKEY;
  path: string;
  value, default: string;
 
  handle: HKEY;
  regtype: integer;
  datasize: integer;
  result: string;
 
begin
  key := HKEY_CURRENT_USER;
  //path := 'Software\Embarcadero\BDS\9.0\Closed Projects';
  path := 'Volatile Environment';
  //value := 'File_0';
  value := 'USERNAME';
 
  default := 'Cha'#140'ne introuvable.';
 
  result := default;
  if RegOpenKeyEx(key, pChar(path), 0, KEY_ALL_ACCESS, handle) = ERROR_SUCCESS then
  begin
    if RegQueryValueEx(handle, pChar(value), nil, @regtype, nil, @datasize) = ERROR_SUCCESS then
    begin
      SetLength(result, datasize);
      RegQueryValueEx(handle, pChar(value), nil, @regtype, PByte(pChar(result)), @datasize);
      SetLength(result, datasize - 1);
    end else
      WriteLn('2');
    RegCloseKey(handle);
  end else
    WriteLn('1');
 
  WriteLn(result);
  Write('Appuyez sur la touche Entr'#130'e... ');
  ReadLn;
end.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
1
Chaîne introuvable