AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Format "%p" ungültig oder nicht kompatibel mit Arg
Thema durchsuchen
Ansicht
Themen-Optionen

Format "%p" ungültig oder nicht kompatibel mit Arg

Ein Thema von TheMiller · begonnen am 14. Jul 2003 · letzter Beitrag vom 15. Jul 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Format "%p" ungültig oder nicht kompatibel mit Arg

  Alt 14. Jul 2003, 16:26
Hello there!

Folgender Code soll bei angeklickter Checkbox einen Wert in die Registry schreiben und, wenn sie nicht angeklickt ist, diesen Wert, fals vorhanden löschen. Ersteres funktioniert. Das Löschen nicht. Wo liegt mein Fehler??

Delphi-Quellcode:
IF Checkbox1.Checked THEN
try
reg := TRegistry.Create;
begin
reg.RootKey := HKEY_LOCAL_MACHINE;
  if reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion', True) then
  if reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
  Reg.WriteString('SPM','C:\Programme\SPM-APPS\bar.exe');
  end;
  finally
  reg.Free;
  end

  ELSE try
  reg := TRegistry.Create;
  begin
  Reg.RootKey := HKEY_LOCAL_MACHINE;
     Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
     Reg.DeleteValue('SPM');
     Reg.Destroy;
     end;
  finally
  reg.free;
  end;
  Close;
  end;
Achso, die Fehlermeldung beim Löschen des vorhandenen Eintrages:
Format "%p" ungültig oder nicht kompatibel mit Argument

Also ich verstehe hier nur Bahnhof, aber ich denke, ihr könnt mir helfen.
Der zu löschende Eintrag besteht übrigens in der Registry!

Ciao
DJ-SPM
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 16:52
Hai DJ-SPM,

ich bin mir nicht sicher ob es daran liegt aber ich habe deinen IF-Block mal in BEGIN-END eingefügt.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 reg : tregistry;
begin
 if Checkbox1.Checked then
  begin
   try
    reg := TRegistry.Create;
    begin
     reg.RootKey := HKEY_LOCAL_MACHINE;
     if reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion', True) then
      if reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
       Reg.WriteString('SPM', 'C:\Programme\SPM-APPS\bar.exe');
    end;
   finally
    reg.Free;
   end;
  end
 else
  begin
   try
    reg := TRegistry.Create;
    begin
     Reg.RootKey := HKEY_LOCAL_MACHINE;
     if (Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True)) then
      begin
       Reg.DeleteValue('SPM');
      end;
    end;
   finally
    reg.free;
   end;
  end;
  Close;
end;
Ausser dem war hier noch ein Fehler.


Delphi-Quellcode:
  ELSE try
  reg := TRegistry.Create;
  begin
  Reg.RootKey := HKEY_LOCAL_MACHINE;
     Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
     Reg.DeleteValue('SPM');
     Reg.Destroy; <-----------------------------
     end;
  finally
  reg.free; <----------------------------
  end;
  Close;
  end;
Du zerstörst einmal den REG mit Destroy und dannach gibst Du ihn noch einmal mit Free frei.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 16:53
Ich kann dir sagen, was der Fehler bedeutet, aber nicht, warum er auftritt:

Der Fehler wird von derr API-Funktion wsprintf (oder auch wvsprintf) gemeldet, wenn in einem Formatstring das Kürzel p verwendet wirrd, obwohl es nicht unterstützt wird. %p stellt die Adresse einer Variablen hexadezimal dar und gibt es erst ab Win2000.

Warum der Fehler an dieser Stelle aber auftritt, kann ich dir auch nicht sagen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#4

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 17:04
danke ihr zwei

klappt alles wunderbar! BIG THX
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#5

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 17:12
Hai Sharky,
Zitat von Sharky:
Du zerstörst einmal den REG mit Destroy und dannach gibst Du ihn noch einmal mit Free frei.
Ich denke das an der Stelle eher ein CloseKey gewünscht war/ist.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 17:14
Hi,

mach mal das
Reg.Destroy; weg und schreib stattdessen ein
Reg.CloseKey; hin.

Der komplette Code einmal (ein bissle verbessert):

Delphi-Quellcode:
if Checkbox1.Checked then
begin
  try
    reg := TRegistry.Create;
    reg.rootKey := HKEY_LOCAL_MACHINE; // besser wäre HKEY_CURRENT_USER!
    reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True)
    reg.WriteString('SPM','C:\Programme\SPM-APPS\bar.exe');
    reg.CloseKey;
  finally
    reg.Free;
end else
begin
  try
    reg := TRegistry.Create;
    reg.RootKey := HKEY_LOCAL_MACHINE; // besser wäre HKEY_CURRENT_USER!
    reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
    reg.DeleteValue('SPM');
    reg.CloseKey;
  finally
    reg.free;
  end;
  close;
end;

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#7

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 18:04
hallo erstmal,

Der Fehler "Format "%p" ungültig oder nicht kompatibel mit Argument" bedeutet, dass irgendwas freigegeben wird, was bereits freigegeben ist.

..und hier wird definitiv reg zweimal freigegeben:

Delphi-Quellcode:
  ...
  begin
     Reg.RootKey := HKEY_LOCAL_MACHINE;
     Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
     Reg.DeleteValue('SPM');
     Reg.Destroy;
  end;
  finally
  reg.free;
  end;
.. also wurde die Fehlerursache schon behoben

mfg daniel
Daniel
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 18:31
Zitat von Chewie:
Der Fehler wird von derr API-Funktion wsprintf (oder auch wvsprintf) gemeldet, wenn in einem Formatstring das Kürzel p verwendet wirrd, obwohl es nicht unterstützt wird. %p stellt die Adresse einer Variablen hexadezimal dar und gibt es erst ab Win2000.
Ich glaube nicht, dass der Fehler was damit zu tun hat. Aber was ich eigentlich sagen will: man kann auch vorher (unter 9x) die Pointer anzeigen lassen. Wenn ich mich recht erinnere (@Luckie, in irgendeinem deiner Tools haben wir das mal gemacht):
Format('%X',[pointer(x)]); Angabe aber ohne Gewähr, weil ich´s nicht mehr 100% weiß. Da kann nur Luckie helfen.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#9

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 18:40
Ha, ich weiß es wieder. Es war in Luckies DLLExports
Format('%.8X', [Integer(DLLInfo.FuncAddresses[i])]); unter der Voraussetzung, dass -wie in dem Fall- "FuncAddresses" ein Pointer (bzw. ein Pointerarray) ist.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Format "%p" ungültig oder nicht kompatibel mit

  Alt 14. Jul 2003, 18:46
Auch wenns Offtopic ist:

Ist ja klar, dass es auch so geht.
%p entspricht ja %08X.

Und mit dem Borland-Format gehts ja ohnehin, da die Formatstrings ja selbst implementiert haben.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  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 17:46 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