HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Programnak visszatérési érték adása, felhasználása


Példaprogram letöltése

11463 bájt

Főleg még régi DOS-os alkalmazások használták előszeretettel azt, hogy a program visszatérési értéket ad, mintha az csak egy függvény lenne. Így ha egy programból meghívunk egy másikat, akkor ez a második program egy számot visszaadhat az első programnak mikor befejeződik annak futása. Így az első program a kapott szám alapján eldöntheti például azt, hogy a meghívott program futása sikeres volt-e.

Ez a módszer persze Windows-os alkalmazásoknál is jól használható, ha vannak olyan programjaink, melyek egymást hívogatják.

A mellékelt példa kipróbálásához a következő lépésekre van szükség:
Nyissa meg a B könyvtárban lévő project-et, majd fordítsa le az EXE-t, de ne futtassa
Nyissa meg az A könyvtárban lévő project-et és indítsa el a programot.

Az A könyvtár programja meghívja B könyvtár programját, mely visszaad egy számot. Ezt a számot az első programban kiírjuk a képernyőre.

Nézzük először a B könyvtár programját.

Az ablakban lévő TEdit komponensbe egy tetszőleges számot írhatunk. Ez a szám lesz a programunk visszatérési értéke.

Amikor bezárjuk a programot, akkor adjuk értékül az imént beírt számot az ExitCode globális változónak.

Ezzel a programunkkal készen is vagyunk. Nézzük most az A könyvtár programját.

Itt először is meg kell hívnunk a másik alkalmazást. Ehhez a CreateProcess függvényt használjuk. Meghívás után meg is kell várnia alkalmazásunknak, amíg a meghívott program futása véget ér. Ehhez a WaitForSingleObject függvényt tudjuk alkalmazni. Amikor ez is megtörtént, akkor van lehetőségünk a meghívott program kilépési kódjának lekérdezésére. Ehhez a GetExitCodeProcess függvényt használhatjuk. Itt első paraméterként a hívott program azonosító kódját kell megadnunk, mely rendelkezésünkre áll a CreateProcess hívása által. Második paraméterként egy DWORD típusú változóra lesz szükség. Ebbe kapjuk vissza a hívott program kilépési kódját, vagyis a visszatérési értékét.
procedure TForm1.Button1Click(Sender: TObject);
var
  si: TStartupInfo;
  pi: TProcessInformation;
  s: string;
  b: boolean;
  dw: DWORD;
begin
  Button1.Caption:='elindult ...';
  Button1.Update;
  FillChar(si, SizeOf(TStartupInfo), 0);
  with si do begin
    cb:=SizeOf(TStartupInfo);
    dwFlags:=STARTF_USESHOWWINDOW+
        STARTF_FORCEONFEEDBACK;
    wShowWindow:=SW_SHOW;
  end;
  s:=ExtractFilePath(Application.ExeName);
  Delete(s, Length(s)-1, 2);
  s:=s+'B\project1.exe';
  b:=CreateProcess(nil, PChar(s), nil, nil, false,
       NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
  if b then begin
    WaitForInputIdle(pi.hProcess, INFINITE);
    WaitForSingleObject(pi.hProcess, INFINITE);
    GetExitCodeProcess(pi.hProcess, dw);
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    Button1.Caption:='ExitCode '+IntToStr(dw);
  end else begin
    Button1.Caption:='A másik program elindítása sikertelen!';
  end;
end;




Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2000 évkönyv 469. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |