Avatar billede oergaard Nybegynder
12. august 2003 - 09:38 Der er 7 kommentarer og
1 løsning

File execution

Jeg har lavet et lille program, som skal kunne eksekvere nogle forskellige andre filer. Hertil bruger jeg WinExec. Da det fra starten ikke er bestemt hvilke filer der er tale om, sætter jeg en variabel af typen ”array of char” ind i stedet for en række char. Det ser ud som følger:
   
Procedure TForm1.FileExecutionEks;
   
Var
  Run Array[0..9] of Char;
   
Begin
  “Fyld array procedure”
  WinExec(Run,SW_SHOWNORMAL);
End;

I dette eksempel virker det hele som det skal! Men i mit program ved man ved kodningen ikke hvor langt arrayet skal være, jeg ønsker derfor at bruge et dynamisk array i stedet. Men når jeg gør dette kan den ikke kompilere projektet. Min kode ser ud som følger:
   
Procedure TForm1.FileExecutionMin;
   
Var
  Run Array of Char;
  strRun : String;
  I : Integer;
   
Begin
  //i min kode indlæses det fra en fil, men samme princip.
  strRun := Form1.Edit1.Text; 
  setLength(Run,Length(strRun);
 
  For I := 0 to (Length(strRun)-1) do
  Begin
    Run[I] := strRun[I+1];
  End;
 
  WinExec(Run,SW_SHOWNORMAL);
End;

Når jeg så prøver at kompilere dette skriver den at jeg ikke kan indsætte et array, hvor der skal indsættes en char. Men det har jeg jo lige gjort i det øverste eksempel. Hvilket i mine øjne kun kan betyde, at jeg ikke kan indsætte et dynamisk array. Det skal så lige siges, at der heller ikke kan indsættes en string. Jeg har så tænkt på at undgå det dynamiske array ved blot at lave et stort array, men mener at det er en dårlig løsning, da det vil bruge unødig hukommelse.

Hvad kan jeg gøre for at løse ovenstående??
Findes der en anden kommando til at eksekvere en fil, hvor man kan indsætte en string eller evt. dynamisk array?

VH Oergaard
Avatar billede kustoden Nybegynder
12. august 2003 - 09:56 #1
Det er fordi WinExec() forventer en PChar.

Mao. WinExec(@Run,SW_SHOWNORMAL);
Avatar billede kustoden Nybegynder
12. august 2003 - 09:57 #2
eller endnu nemmere WinExec(PChar(strRun),SW_SHOWNORMAL);
Avatar billede oergaard Nybegynder
12. august 2003 - 09:59 #3
Prøver det lige, men hvordan kan det så være, at det virker med et statisk array of char??

VH Oergaard
Avatar billede Slettet bruger
12. august 2003 - 10:05 #4
Et statisk array of char der starter på 0 (altså array[0..100] er lig med PChar.
Et array of char vil for enhver anden end compileren være det samme. Men sådan er der jo så meget.
Avatar billede kustoden Nybegynder
12. august 2003 - 10:06 #5
Jeg kan ikke lige på stående fod huske, hvordan et statisk array bliver gemt i hukommelsen, men det foresvæver mig, at det er svarende til en VarArray, og dermed en pointer.
(Du må bare ikke hænge mig op på det, det er kun svagt i baghovedet, og jeg har ikke lige tid til at kontrollere)
Avatar billede oergaard Nybegynder
12. august 2003 - 10:08 #6
det er helt ok, det var også noget i den stil jeg var kommet frem til!

VH Oergaar
Avatar billede kustoden Nybegynder
12. august 2003 - 10:09 #7
Jeg tilslutter mig briancaos's forklaring
Avatar billede oergaard Nybegynder
12. august 2003 - 10:22 #8
Tak for hjælpe. Det virker som det skal...

brugte WinExec(PChar(strRun,SW_SHOWNORMAL);

VH Oergaard
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester