Entwickler-Ecke

Dateizugriff - Mit einer DLL Registryeinträge schreiben und lesen


bis11 - Mo 17.02.03 16:54
Titel: Mit einer DLL Registryeinträge schreiben und lesen
Hi,

die Überschrift sagt ja eigentlich schon alles. Hat das schonmal jemand gemacht und wenn ja wie ? Ich habe das versucht, nur konnt ich leider keine Strings oder Integerwerte übergeben oder auslesen. Ich habe auch den Hinweis von SHAREMEM und der BORLNDMM.DLL beachtet.


AXMD - Mo 17.02.03 17:04

Hi,

Integer-Werte dürften eigentlich keine Probleme machen. Anstelle von Strings nimmst du einfach PChars oder ShortStrings.
Außerdem: wo genau liegt dein Problem? Das geht aus deinem Post irgenwie nicht zu 100% hervor.

AXMD


bis11 - Mo 17.02.03 17:24

Wie ich die Strings oder Integerwerte übergeben habe, wurde in die Registry immer irgendwelche Zeichen eingetragen. Da ich den Hinweis nun mit SHAREMEM und der DLL beachtet hatte, war meine Überlegung, dass ich solche Einträge mit einer Function in einer DLL nicht machen könnte.

Hier mal ein Beispiel, wie ich es in die DLL als Funktion reingeschrieben habe :

Quelltext
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:
function registry_write_string(progname,valuename,value:string):boolean;  
var                                                               
  Registry : TRegistry;                                    
begin                                                            
  registry_write_string := true;                        
  Registry := TRegistry.Create;                       
  Registry.RootKey:=HKEY_LOCAL_MACHINE;    
  if Registry.KeyExists('\Software\Verzeichnis\' + progname) = false then
    try  
      Registry.CreateKey('\Software\Verzeichnis\' + progname);   
    except                                                                    
      Registry.Free;                                                       
      registry_write_string := false;                                
      Exit;                                                                     
    end;                                                                       
  try                                                      
    if Registry.OpenKey('\Software\Verzeichnis\' + progname , true) = true then   
      Registry.WriteString(valuename,value)    
    else begin                       
      MessageDLG('Es konnte nicht in die Regsitry geschrieben werden',mtError,[mbOK],0); 
      registry_write_string := false;       
    end;                      
  finally                      
    Registry.CloseKey; 
    Registry.Free;    
  end;
end;


Und so habe ich die DLL in einer Unit eingebunden :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
unit dll_unit;

interface

function registry_write_string(progname,valuename,value:string):boolean; stdcall;

implementation

function registry_write_string(progname,valuename,value:string):boolean; stdcall; external 'name.dll';
end.


Dann habe ich ganz normal den Namen aufgerufen und die Werte angegeben.


foxy - Di 18.02.03 09:48

guden
also vor kurzem hatte ich auch porbleme mit strings und .dll
mit der reg. kann ich dich immo leider nicht helfen, aber ich sehe keinen fehler in deinem code
folgendes.... die Stringübergabe, ist sehr fehlerhaft .... darum mach das am besten was AXMD gesagt hat das hat bei mir wunder bewirkt :rofl:


bis11 - Di 18.02.03 13:22

Also für alle, die es interessiert. Ich muß in der DLL natürlich den stdcall; noch mit in die Funktionsanweisung aufnehmen. Dann klappt das auch, bei den Befehlen, wie ich die DLL einbinde.