Exec, Pascal.

0

Wybaczcie, że temat troche lamerski, ale mam problem z otwieraniem innych programow z poziomu mojego...

program asmc;
uses crt,dos;
var nazwa,temp,parametr:string;
begin
writeln('Podaj nazwe zrodla bez .asm');
readln(nazwa);
temp:=nazwa + '.asm';
writeln('Z jakim parametrem linkowac ?');
readln(parametr);
writeln('Kompilacja ' + temp + ' z parametrem linkowania ' + parametr + '. Nacisnij enter dla rozpoczecia kompilacji');
readln;
exec('c:\TASM.exe',temp);
writeln('Zakonczono kompilacje. Linkowanie.');
temp:=nazwa + '.obj';
parametr:=parametr + ' ' + temp;
exec('c:\TLINK.exe',parametr);
readln;
end.

Teraz moze opisze o co chodzi.... ucze sie pisac w assemblerze i troche mnie irytuje co chwila odpalanie cmd, wchodzenie do folderu itd... wiec chcialem napisac program, w ktorym podaje nazwe pliku zrodlowego *.asm a on odpala mi kompilator, kompiluje do .obj, pozniej odpala tlink i z wybranymi parametrami zamienia obj na com.... ale problem polega na tym ze ani nie kompiluje, ani nie linkuje - w ogóle nie odpala tych programow.... probowalem ze slashami zamiast backsleshy - nie pomoglo, probowalem ze sciezka posrednia zamiast bezposredniej, nie pomoglo..... w czym moze tkwic problem ?

0

exec('c:\TASM.exe ',temp);

spacje!, pamiętaj o odstępach !

0

guzik... nie pomaga. W takim razie - znacie może rozwiązanie pod Delphi 7 ? Szukalem w pomocy Delphi, ale tam trochę namieszali z tym otwieraniem plików.... Zależy mi na tym, aby nie było formy of course.

0

spróbuj może coś takiego:

SwapVectors;
Exec({tutaj parametry});
SwapVectors;

popatrz do pomocy w TP do przykładu funckji exec tam jest właśnie taki przykład i działa.

W delphi możesz zastosować funkcję ShellExecute lub WinExec

0

Próbowałem z SwapVectors - nic nie pomaga.... co do WinExec i ShellExecute - do żadnego z nich nie ma pomocy w Delphi 7, a z tego co przeczytałem WinExec chce jako drugi parametr cardinal - wiem tylko tyle ze to rodzaj zmiennej integerowskiej, ale po co jemu i co ona ma oznaczac to ja nie wiem... :( ;-(

0

uses
Windows, SysUtils, ShellAPI, .............. ;

procedure RunApp(const FileName, Parameters: string);
begin
  ShellExecute(
    0, // lub Application.Handle lub Handle
    'open',
    PChar(FileName),
    PChar(Parameters),
    PChar(ExtractFileDir(FileName)),
    SW_SHOW);
end;

call example:
RunApp('c:\windows\notepad.exe', 'c:\autoexec.bat');

Możesz też użyć ShellExecuteEx, CreateProcess.
A opisu tych funkcji szukaj w MSDN-ie (http://msdn.microsoft.com/library)

0

Dzięki! nareszcie wszystko ladnie działa :)

trochę nie na temat, ale....

(...)
zrodlo:string;
i:integer;
(...)
  for i:=0  to length(zrodlo) do
    begin
      if zrodlo[i]='' then
        begin
          delete(zrodlo,0,i);
        end;
    end;

Zadaniem w/p kodu jest przeszukiwanie zmiennej zrodlo i usuwanie wszystkiego do znaku .... czyli np jak mam:
c:\windows\system\krowa.tmp
to po zastosowaniu kodu powinno zostac
krowa.tmp
tylko ze nie zostaje..... w czym problem ? :/

0

Nie męcz się z własną funkcją tylko zastosuj po prostu ExtractFileName

0

A jak chcesz się pomęczyć, to to 0 w delete zamień na 1, albo napisz po prostu tak:

While x:=Pos('', Path)>0 do Delete(Path, 1, x);

albo jak nie działa (nie wiem, czy ten myk z podstawieniem w warunku działa w Delphi) to: While Pos('', Path)>0 do Delete(Path, 1, Pos('', Path));

 a będzie działać szybciej i na pewno...
0

hmmm wszystko znowu ladnie dziala... idac dalej z moimi pytaniami, tym razem cos mniej lamerskiego - czy przy ShellExecutowaniu programu, mogę zrobić, aby jego okno nie wyskakiwało, tylko było w procesie, wykonywało i cichutko kończyło ? (Czyli aby nie bylo widac ze inny program sie uruchomil) oraz czy jest mozwliosc aby zawartosc tego co ten program wyswietlil wyswietlic w moim programie ?

0

zamiast SW_SHOW wpisz SW_HIDE

0

Hmmm no fakt :P. A jeżeli chodzi o wywietlanie w moim programie tego co teoretycznie wyswietlal odpalany przeze mnie konsolowy program to wie ktos cos moze ? :/

0

Na swissdelphicenter.com jest coś takiego.

0

Hmmm a mógłbyś troszeczkę bardziej konkretnie ? bo szukam non-stop cały ten serwis i to trochę jeszcze potrwa...

1 użytkowników online, w tym zalogowanych: 0, gości: 1