[Delphi] Het werkt maar waarom?

Pagina: 1
Acties:

  • marenk_vos
  • Registratie: Augustus 2001
  • Laatst online: 23-07 13:21
Ik heb deze code ooit eens van internet afgehaald maar begrijp het maar gedeeltelijk.

Function KopieerFolder(bron:String; doel:String): LongInt;
var FOS : TShFileOpStruct;
begin
Result := 0;
bron := bron + #0;
doel := doel + #0;

with FOS do
begin
Wnd := Application.Handle;
wFunc := FO_COPY;
pFrom := @bron[1];
pTo := @doel[1];
fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION
end;
Result := ShFileOperation(FOS);
end;

Waarom is de functie een longint?
Waarom moet er een #0 achter de variabele
waar dient wnd voor? en waarom is dat application.handle?
waarom moet pFrom: @bron[1] zijn?

Ik heb de shellapi.pas al doorgekeken maar kon deze dingen niet beantwoord krijgen, is hier ook een helpfile van?

Dell XPS 17 Intel i7 2630 Nvidia GT555 3Gb Hd1: OCZ Vertex 2 SSD 60 GB Hd2: 500Gb


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:58
Vraag het misschien eens aan de maker.

https://fgheysels.github.io/


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Result := ShFileOperation(FOS);

Hij geeft de status van deze ShellAPI functie door. Dan kun je eventuele foutcodes van de ShellAPI functie uit de Delphi functie halen.

Forget your fears...
...and want to know more...


Verwijderd

1. De functie is een longint, omdat de API CALL 'SHFileOperation' waarschijnlijk een longint retourneert als return-code (of een dword)
2. Die #0 is er voor omdat de api calls met zgn. nul terminated strings werken, die zijn verschillend van de delphi string.
3. Die wnd is gewoon een handle die in de meegegeven structure moet zitten, het is de handle naar de calling applicatie.
4. Die pfrom, doel met [1] erachter is in samenwerking met de #0 erachter een methode om de delphistring om te zetten naar een nul-terminated string.

verder moet je eens zoeken op msdn.microsoft.com ofzo.

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 20:22

Reptile209

- gers -

Zo te zien is ShFileOperation() oorspronkelijk een C(++) functie.

Dat verklaart de #0 aan het einde van de strings (die moeten in C nul-terminated zijn). Verder slaat Delphi (Pascal) in het eerste element van een string (= een array van char's) de lengte op. C wacht op de #0 aan het einde, dus om een Delphi-string naar C over te zetten moet je element [ 0 ] overslaan en een #0 toevoegen.

Waarom het een longint is, moet je aan de maker of de F1 vragen, waarschijnlijk zijn dat default-foutcodes van het OS.

De meeste functies gebruiken een handler naar het actieve window of de applicatie die ze aanroept. In Delphi zou je daar meestal Self voor gebruiken, maar daar kan C niks mee, vandaar die wnd-toewijzing.

edit:

F*ck, te laat :P

Zo scherp als een voetbal!


Verwijderd

Heb ff die SHFileoperation opgezochty, hier de link:
http://msdn.microsoft.com...tions/shfileoperation.asp

  • marenk_vos
  • Registratie: Augustus 2001
  • Laatst online: 23-07 13:21
Perfect mensen, bedankt.

Dell XPS 17 Intel i7 2630 Nvidia GT555 3Gb Hd1: OCZ Vertex 2 SSD 60 GB Hd2: 500Gb

Pagina: 1