AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem bei WriteBinaryData und Pchar
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei WriteBinaryData und Pchar

Ein Thema von me2u · begonnen am 28. Aug 2006 · letzter Beitrag vom 29. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
me2u
(Gast)

n/a Beiträge
 
#1

Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 12:34
Hallo,

ich möchte in der Windows Registry unter HKEY_CURRENT_USER \SOFTWARE\Microsoft\Windows\CurrentVersion\Interne t Settings\Connections den Wert DefaultConnectionSettings ändern.

Er soll also so aussehen :3c00000001000000010000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000
wenn man den umwandelt bekomme ich :"<........................................" usw
das ist korrekt!

aber mit folgenen Code

Delphi-Quellcode:
var reg:tregistry;
s:string;
begin

        reg:=tregistry.Create;
        reg.RootKey:=HKEY_CURRENT_USER;
        REG.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections',true) ;
        // s setzen und umwandeln
          s:='3c000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
        Reg.WriteBinaryData('DefaultConnectionSettings',pchar(s)^ , Length(s));
        reg.CloseKey;
        reg.Free;

end;
bekomme ich 33633030303030303031303030303030303130303030303030 30303030303030303030....uws
wenn man den umwandel bekomme ich :"3c0000000100000001000000000000000000000000000000 00000" usw
- also eigentlich dass, was ich wollte aber in der registry steht hald nur 3363303030303030303130

Der Fehler muss irgendwie bei PCHAR liegen - habe leider absolut keine Ahnung davon

Bitte helft!!
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 12:41
Hi,
was meinst du denn was WriteBinaryData tut? Der Name sagt es doch, es werden die Daten binär geschrieben. Ein PChar ist nur ein Zeiger auf ein Array voller Character, das Nullterminiert ist. Anders gesagt hast du ein dyn. Byte Array, dessen ende durch chr('0') gekennzeichnet ist.
3 wäre als ASCII zeichen einfach die 33, c die 63 usw.
Wenn du die Stringrepräsentation schreiben möchtest, verwende einfach writeString!

Gruß Der Unwissende

[ADD]
Sorry, sehe erst jetzt was du eigentlich tun wolltest.
Ok, wenn du bytes schreiben möchtest, dann verwende einfach ein Byte Array. In der Uses Types (glaube ich) findest du TByteDynArray. Versuch es ungefähr so:

Delphi-Quellcode:
var buffer : TByteArray = ($3c, $00, $00, $00, $01, $00, ...);
...
  Reg.WriteBinaryData('DefaultConnectionSettings', buffer[0], Length(buffer));
[/Add]
  Mit Zitat antworten Zitat
me2u
(Gast)

n/a Beiträge
 
#3

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 13:06
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var reg:tregistry;
    buffer : TByteArray = ($3c, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 00, $0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00);
begin
        reg:=tregistry.Create;
        reg.RootKey:=HKEY_CURRENT_USER;
        REG.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections',true) ;
        Reg.WriteBinaryData('DefaultConnectionSettings', buffer[0], Length(buffer));
        reg.CloseKey;
        reg.Free;
end;
Fehler:Cannot initialize local variables
So also ich arbeite zum ersten mal mit TByteArray...
Du hast irgendetwas von uses gesagt, muss ich da noch was definieren oder kommt vielleicht noch was unter type oder ein array of ?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 13:08
Der fehler sagt ja schon alles. Lokale Variablen kann man nicht wie globale bei der definition initialisieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
me2u
(Gast)

n/a Beiträge
 
#5

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 13:10
ok gut! aber jetzt is noch der fehler number of elements differs from declaration
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 13:17
Ok, sorry mein Fehler. Das geht nur wenn du die Länge des Arrays festlegst.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var reg:tregistry;
    buffer : Array[0..51] of Byte = ($3c, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 00, $0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00);
begin
        reg:=tregistry.Create;
        reg.RootKey:=HKEY_CURRENT_USER;
        REG.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections',true) ;
        Reg.WriteBinaryData('DefaultConnectionSettings', buffer[0], Length(buffer));
        reg.CloseKey;
        reg.Free;
end;
Wenn ich mich nicht verzählt habe, sollte das so klappen.
  Mit Zitat antworten Zitat
me2u
(Gast)

n/a Beiträge
 
#7

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 13:19
Es waren 52 - aber es klappt !!! Danke danke !

bei 51 kommt komischerweise eine länge von 52 in der registrierung raus...
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 13:36
Das Array ist nullindiziert, 0..51 = 52 Werte. 1..51 wären dann die 51
Da muss man immer aufpassen, aber du übergibst ja auch das Element an der Stelle [0].
  Mit Zitat antworten Zitat
me2u
(Gast)

n/a Beiträge
 
#9

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 15:21
so ich habe jetzt einen string den ich genauso wieder in der registrierung haben will, nur hald als binary data. Kann ihn aber vorher nicht definieren, weil die länge meines strings variiert.

3c00000001000000020000001100000038322e3133372e3235 322e3136323a38300000000000000000000000000000000000 00000000000000000000000000000000000000

sollte letztendlich also wie auf dem bild dann aussehen

Bild im Anhang

vielleicht irgendwie mit einem dynamischen array of byte und dann den string einlesen aber wie ???

[edit=sakura] Bild als Anhang. Mfg, sakura[/edit]
Miniaturansicht angehängter Grafiken
untitled0-15-13-48_176.png  
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: Problem bei WriteBinaryData und Pchar

  Alt 28. Aug 2006, 15:49
Da dein String sedizimale Werte enthält, solltest du einfach die Funktion HexToBin verweden.

Delphi-Quellcode:
var buffer : TByteDynArray;
begin
  // sei s der string den du umwandeln möchtest
  setLength(buffer, length(s) div 2);
  
  HexToBin(PChar(s), PChar(@buffer[0]), length(buffer));
  
  // jetzt stehen in Buffer die Byte Werte des Strings

  ....
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz