Autor Beitrag
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Mo 17.02.03 16:54 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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 :
ausblenden 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 :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: 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:

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
bis11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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.