Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Interface implementieren... (https://www.delphipraxis.net/28149-interface-implementieren.html)

barnti 20. Aug 2004 11:55

Re: Interface implementieren...
 
Hallo,
ich danke dir an dieser Stelle schon mal für deine Geduld.
Ich habe bereits mehrer Version dieser Klasse ausprobiert. Nur diese will einfach nicht gelingen.
Ich kann nicht erkennen, welche Parameter bei meiner Version für den Aufruf von 'VerQueryValue' nicht richtig sind.

MathiasSimmack 20. Aug 2004 12:17

Re: Interface implementieren...
 
Zitat:

Zitat von barnti
ich danke dir an dieser Stelle schon mal für deine Geduld.

Oh, kein Problem. Wärst du einer von den "Kannst du mir mal den Code schreiben"-Typen gewesen, hätte ich mich inzwischen schon gar nicht mehr gemeldet. ;)

Zitat:

Ich kann nicht erkennen, welche Parameter bei meiner Version für den Aufruf von 'VerQueryValue' nicht richtig sind.
Vllt. scheitert´s bei dir bloß am Backslash. Wenn ich das richtig sehe, benutzt du einen. Ich habe zwei. Muss nichts bedeuten, weil ich das ehrlich gesagt so von sakura übernommen habe. Hm, mal fragen .... saaaaaaaaaaaakuuuuuuuuuuuraaaaaaaaaaaaaaaaaaa? :?

barnti 20. Aug 2004 12:34

Re: Interface implementieren...
 
Hallo,

der Fehler scheint an folgender Stelle zu sein:
Delphi-Quellcode:
                       // z.B. 'CompanyName'
function TmyVersionInfo.GetKey(KeyName: String): String;
var
  InfoLength: UINT;
  LangCharSet: String;
begin
  if InfoAvailable then
    begin
      //SetLength(Result, 255);
      //Dieser Aufruf ist irgentwie falsch . Hier kommt immer false raus

      if VerQueryValue(myVersionInfo,PChar(KeyName),Pointer(result), InfoLength) then
        begin                      
          SetString(Result,PChar(Result),InfoLength-1);
        end
      else begin
        result:=''
      end;
    end
  else begin
    result:= 'N/A';
  end;
end;
Immerhin scheint der Fehler nun ziehmlich eingegrenzt zu sein...

NicoDE 20. Aug 2004 13:04

Re: Interface implementieren...
 
Zitat:

Zitat von barnti
Delphi-Quellcode:
procedure SetVersionInfo(const Index: Integer; const Value: String);

Delphi erwartet als Getter/Setter bestimmte Funtionsprototypen (er mag das 'const' bei Index nicht - erferne es, und alles wird gut).

barnti 20. Aug 2004 13:13

Re: Interface implementieren...
 
Hallo NicoDE,

ich weiß nicht wie du darauf kommst? Der Fehler liegt definitiv im Aufruf der genannten Funktion, da diese immer false zurückliefert. Die Zugriffsmethoden sind bis dahin noch nicht im Spiel.
Aber vielleicht komme ich da ja noch hin ;)

NicoDE 20. Aug 2004 13:18

Re: Interface implementieren...
 
Zitat:

Zitat von barnti
ich weiß nicht wie du darauf kommst?

Ich wollte lediglich die ursprüngliche Frage beantworten :D

barnti 20. Aug 2004 13:20

Re: Interface implementieren...
 
Hi,
axo. Ich habe mich schon selber etwas 'verlaufen'. Und für mein Problem habe ich immer noch keine Lösung :(

MrKnogge 11. Jun 2005 11:25

Re: Interface implementieren...
 
Hallo,

ich bekomme bei der Variante von MathiasSimmack einen EAccessViolation-Error,
Zitat:

Zugriffsverletzung bei Adresse 004568AB in Modul 'Project1.exe'. Lesen von Adresse 00000008.
Ausgelöst wird dieser wohl hier:
Delphi-Quellcode:
function TVersionInfo.FormatVersionNumber: string;
const
  FormatStr = '%d.%d.%d.%d';
begin
  Result := Format(FormatStr,
    [(FInfo^.dwFileVersionMS and $FFFF0000) shr 16,
      FInfo^.dwFileVersionMS and $0000FFFF,
     (FInfo^.dwFileVersionLS and $FFFF0000) shr 16,
      FInfo^.dwFileVersionLS and $0000FFFF]);
end;
Warum ist der Zeiger = nil :gruebel:

Kann mir jemand helfen ?


gruss

dahead 11. Jun 2005 11:42

Re: Interface implementieren...
 
Hallo,

ich hab mir jetzt nicht alles durchgelesen (habe nur gesehen, dass du auf seite 2 des threads noch keine lösung hast...), von daher bitte ich um verzeihung falls das problem bereits gelöst ist.

ich halte u. a. das hier für den grund des scheiterns:

Delphi-Quellcode:
procedure SetVersionInfo(const Index: Integer; const Value: String);
...
property StandardKeys[index: Integer]: String read GetVersionInfo write SetVersionInfo;
müsste so lauten:

Delphi-Quellcode:
procedure SetVersionInfo(Index: Integer; const Value: String);
...
property StandardKeys[index: Integer]: String read GetVersionInfo write SetVersionInfo;
ohne die const deklaration müsste es gehen, denke ich.

mfg
-dh

MrKnogge 11. Jun 2005 11:53

Re: Interface implementieren...
 
Zitat:

Zitat von MrKnogge
...bei der Variante von MathiasSimmack ...

Ich meine die andere Variante, nicht die von barnti.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz