Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Comandline und WM_COPYDATA (https://www.delphipraxis.net/194263-comandline-und-wm_copydata.html)

EWeiss 4. Nov 2017 12:25

AW: Comandline und WM_COPYDATA
 
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

Glados 4. Nov 2017 13:18

AW: Comandline und WM_COPYDATA
 
Vielleicht wäre das hier auch eine Möglichkeit zur Verifikation. Werde ich selber später mal testen.

https://stackoverflow.com/questions/...16703#35516703

himitsu 4. Nov 2017 17:15

AW: Comandline und WM_COPYDATA
 
Zitat:

Zitat von EWeiss (Beitrag 1385069)
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.

Glados 4. Nov 2017 17:24

AW: Comandline und WM_COPYDATA
 
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?

EWeiss 4. Nov 2017 17:24

AW: Comandline und WM_COPYDATA
 
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!
Delphi-Quellcode:
function StrLen(const Str: PWideChar): Cardinal;
Delphi-Quellcode:
function StrLen(const Str: PAnsiChar): Cardinal;

Zitat:

LPARAM
Delphi-Quellcode:
LPARAM(@CopyDataStruct));

korrigiert wenn auch nicht nötig die Anwendung ist 32Bit nicht 64Bit.

gruss

EWeiss 4. Nov 2017 17:25

AW: Comandline und WM_COPYDATA
 
Zitat:

Zitat von Glados (Beitrag 1385150)
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

Glados 4. Nov 2017 17:27

AW: Comandline und WM_COPYDATA
 
Habe selbe Zeile auch schon mit DWORD gesehen.
Hier wird u.a. auch Integer verwendet http://www.cryer.co.uk/brian/delphi/...eforfolder.htm

EWeiss 4. Nov 2017 17:36

AW: Comandline und WM_COPYDATA
 
Zitat:

Zitat von Glados (Beitrag 1385154)
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


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

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