AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Comandline und WM_COPYDATA

Ein Thema von EWeiss · begonnen am 3. Nov 2017 · letzter Beitrag vom 4. Nov 2017
Antwort Antwort
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 12:25
Zitat:
da im Prinzip jeder ein WM_COPYDATA verschicken kann, ist ohne z.B. Check(summe) nicht kaum zu garantieren, das man eine gültige Message von seiner eigenen Gegenstelle empfängt.
Das prüfe ich gegen mit Extension die gültig sein müssen und ob die Datei existiert bevor der Link zur Datei gestartet wird.
Sehe da eigentlich kein Problem.

Wenn sie ungültig ist wird sie einfach nicht verarbeitet.

Danke.

gruss
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#12

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 13:18
Vielleicht wäre das hier auch eine Möglichkeit zur Verifikation. Werde ich selber später mal testen.

https://stackoverflow.com/questions/...16703#35516703
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#13

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 17:15
Delphi-Quellcode:
      // Commandline Parameter auswerten
      if ParamCount > 0 then
      begin
        StartParams := '';
        for Params := 1 to ParamCount do
          StartParams := StartParams + ' ' + ParamStr(Params);

        pName := PWideChar(StartParams);
        CopyDataStruct.dwData := 0;
        CopyDataStruct.cbData := (StrLen(pName) + 1) * sizeof(Char);
        CopyDataStruct.lpData := pName;

        SendMessage(Prop.MainHandle, WM_COPYDATA, 0, integer(@CopyDataStruct));
      end;
Wie ist StartParams deklariert?
Ich hoffe als WideString oder UnicodeString, wegen PWideChar und nicht PChar.
Und pName ist auch ein PWideChar?

Warum SizeOf(Char) und nicht SizeOf(WideChar) obwohl es doch PWideChar ist.
Genauso warum StrLen und nicht StrLenW, wenn man WideChar und nicht Char verwendet.

Und warum der böse Integer-Case beim SendMessage?
Schonmal was von 64 Bit gehört?
WPARAM, LPARAM und LRESULT sind die korrekten Typen.


Das ist so ein Code, der nur noch knallen kann, wenn er in einem Nicht-Unicode-Delpho oder in FreePascal genutzt wird,
und unter 64 Bit bereitet er einem auch nur noch Freude.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#14

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 17:24
Zitat:
und unter 64 Bit bereitet er einem auch nur noch Freude.
Ich hatte mal die Möglichkeit meinen Code bei einem Bekannten testen zu dürfen, der eine 64-Bit-Delphi-Lizenz hat.
Ich verwende auch diesen bösen Integer-Cast und Char. Es hat zu keinem Zeitpunkt geknallt.

Wie sähe das oben gezeigte Code-Exemplar denn RICHTIG aus?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 17:24
Zitat:
Wie ist StartParams deklariert?
Ist WideString..

Zitat:
Und pName ist auch ein PWideChar?
Ja.

Zitat:
SizeOf(Char)
war ein Fehler berichtigt.

Zitat:
StrLenW
Gibt es unter D2010 nicht.
StrLen ist richtig wenn ich PWideChar übergebe.
SysUtils!
function StrLen(const Str: PWideChar): Cardinal; function StrLen(const Str: PAnsiChar): Cardinal;
Zitat:
LPARAM
LPARAM(@CopyDataStruct));
korrigiert wenn auch nicht nötig die Anwendung ist 32Bit nicht 64Bit.

gruss

Geändert von EWeiss ( 5. Nov 2017 um 08:33 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 17:25
Zitat:
und unter 64 Bit bereitet er einem auch nur noch Freude.
Ich hatte mal die Möglichkeit meinen Code bei einem Bekannten testen zu dürfen, der eine 64-Bit-Delphi-Lizenz hat.
Ich verwende auch diesen bösen Integer-Cast und Char. Es hat zu keinem Zeitpunkt geknallt.

Wie sähe das oben gezeigte Code-Exemplar denn RICHTIG aus?
LPARAM(@CopyDataStruct));

gruss
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#17

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 17:27
Habe selbe Zeile auch schon mit DWORD gesehen.
Hier wird u.a. auch Integer verwendet http://www.cryer.co.uk/brian/delphi/...eforfolder.htm

Geändert von Glados ( 4. Nov 2017 um 17:30 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: Comandline und WM_COPYDATA

  Alt 4. Nov 2017, 17:36
Habe selbe Zeile auch schon mit DWORD gesehen.
Hier wird u.a. auch Integer verwendet http://www.cryer.co.uk/brian/delphi/...eforfolder.htm
Er bezieht das auf 64BIT eigentlich kann man es vernachlässigen habe auch immer Integer verwendet in 32Bit Anwendungen und noch nie Probleme.
Aber gut habe es geändert.

Delphi-Quellcode:
LPARAM = INT_PTR;
INT_PTR = Integer;
am ende ein Integer... (32Bit) gehüpft wie gesprungen.
ABER! Jetzt kommt's.. sieht schöner aus.

gruss

Geändert von EWeiss ( 4. Nov 2017 um 18:08 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:50 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