Externes Programm aufrufen funzt nicht

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
yodi
Beiträge: 22
Registriert: So 11. Jan 2015, 06:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: bei Göttingen
Kontaktdaten:

Externes Programm aufrufen funzt nicht

Beitrag von yodi »

Hi,

ich habe ein Problem beim aufrufen eines externen Programms.
Im Task-Manager kann ich sehen das das Programm aufgerufen wird.
Aber es erfolgt keine Ausgabe die beim Aufruf rigctl.exe -l erfolgen sollte.

Kann es sein das der Parameter -l beim Aufruf verschluckt wird ? D



Hier der komplette Code

Code: Alles auswählen

 
program qrg;
 
{$mode objfpc}{$H+}
 
uses
{$ifdef Unix}
  BaseUnix, Classes, sysutils, Process;
{$else}
  sysutils, Process,Classes,Windows;
{$endif}
var
     Datei: Text;       (* Dateizeiger *)
     zeile: string;     (*      *)
     trx:   string;     (* funkgerät *)
     speed: string;     (* Baudrate für serielle Schnittstelle     *)
     port:  string;     (* Serielle schnittstelle     *)
     Position : integer;(* Position im String    *)
     PositionA : integer;
     PositionB : integer;
     parameter: string;
     wert: String;
     AProcess: TProcess;
     AStringList: TStringList;
     zeilennr: integer;
     befstr: string;
     VFOa: string;
     VFOb: String;
     TRXMode: String;
     rigctlpath : string;
 
 
 
begin
      // if FileExistsUTF8('c:\Program Files (x86)\hamlib-win32-1.2.15.3\bin\rigctl.exe') then
       rigctlpath := 'c:\Program Files (x86)\hamlib-win32-1.2.15.3\bin\';
       if FileExists(rigctlpath+'rigctl.exe') then
       begin
          if not FileExists('qrg.ini') then
              begin
                   //Datei existiert nicht --> erstellen
                    assignfile(Datei, 'qrg.ini');
                    rewrite(Datei);
                    WriteLn (Datei, '#########################################');
                    WriteLn (Datei, '# Ini Datei für das Programm qrg        #');
                    WriteLn (Datei, '# qrg dient zum wechseln einer Frequenz #');
                    WriteLn (Datei, '# mittels HamLib bei ein Transceiver    #');
                    WriteLn (Datei, '# (c) by Dirk Unverzagt, DL8AAX         #');
                    WriteLn (Datei, '#########################################');
                    WriteLn (Datei, '# Serielle Schnittstelle');
                    WriteLn (Datei, '# port=/dev/ttyUSB0');
                    WriteLn (Datei, '#port=/dev/ttyS0  ');
                    WriteLn (Datei, '# für windos');
                    WriteLn (Datei, 'port=com1 ');
                    WriteLn (Datei, ' ');
                    WriteLn (Datei, '# Baudrate');
                    WriteLn (Datei, 'speed=4800 ');
                    WriteLn (Datei, ' ');
                    WriteLn (Datei, '# TRX=Nr. Die Nummer deines TRX ');
                    WriteLn (Datei, '# Abfragen kannst du die Nr.mir rigctl -l  ');
                    WriteLn (Datei, 'trx=1  ');
                    WriteLn (Datei, ' ');
                    WriteLn (Datei, '# Pfad zu rigctl.exe');
                    WriteLn (Datei, 'rigctlpath=c:"\Program Files (x86)"\hamlib-win32-1.2.15.3\bin\ ');
 
                    closefile(Datei);
              end
          else
              begin
                    // Datei existiert
                    Assign (Datei, 'qrg.ini');     (* Pfad festlegen *)
                    Reset (Datei);    (* Datei zum Lesen oeffnen *)
 
                    REPEAT
                          ReadLn (Datei, zeile);   (* eine Zeile lesen *)
 
                          if zeile[1]='#' then // beginnt die Zeile mit ein #
                              else
                              begin    // nein
                                    //WriteLn (zeile);   (* eine Zeile am Bildschirm ausgeben *)
                                    Position := Pos('=', AnsiLowerCase(zeile));
                                    if Position <> 0 then   // ein = ist vorhanden also parameter zeile
                                      begin
                                           parameter := Trim(Copy(zeile, 1,Position-1 )); // Text bis zum =
                                           wert :=  Trim(Copy(zeile, Position+1, Length(zeile))); // Text bis zum =
                                           case LowerCase(parameter) of
                                                'port':
                                                     port := wert;
                                                'speed':
                                                     speed := wert;
                                                'trx':
                                                     trx := wert;
                                                'rigctlpath':
                                                     rigctlpath :=wert;
                                           end;
                                      end;
                              end;
                    UNTIL EOF (Datei);  (* Abbruch, wenn das Zeilenende erreicht ist; also wenn EOF TRUE liefert *)
 
                    Close (Datei);  (* Datei schliessen *)
              end; // datei einlesen
       //Paremeter übergabe
       if ParamCount > 0 then
                            begin
                                 case LowerCase(ParamStr(1)) of
                                      '-l':
                                           begin
                                          writeln('Unterstuetzte Transceiver');
                                             // Nun erstellen wir das Objekt TProcess und
                                             // weisen es der Variable AProcess zu.
                                         AProcess := TProcess.Create(nil);
                                            // Erzeugen des TStringList Objekts.
                                         AStringList := TStringList.Create;
 
                                            // Gibt an, welcher Befehl vom Prozess ausgeführt werden soll
 
                                         {$IFDEF WIN32}
                                         AProcess.CommandLine := rigctlpath+'rigctl.exe -l';
                                         {$ENDIF}
                                         {$IFDEF LINUX}
                                          AProcess.CommandLine := 'rigctl -l';
                                         {$ENDIF}
                                               //writeln( rigctlpath + 'rigctl.exe -l' );
                                            // Wir definieren eine Option, wie das Programm
                                            // ausgeführt werden soll. Dies stellt sicher, dass
                                            // unser Programm nicht vor Beendigung des aufgerufenen
                                            // Programmes fortgesetzt wird. Außerdem geben wir an,
                                            // dass wir die Ausgabe lesen wollen
                                         AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
 
                                            // Startet den Prozess, nachdem die Parameter entsprechend
                                            // gesetzt sind
                                         AProcess.Execute;
 
                                            // Folgendes wird erst nach Beendigung  ausgeführt
 
                                            // Die Ausgabe wird nun in die Stringliste gelesen
                                         AStringList.LoadFromStream(AProcess.Output);
 
                                         // Speichert den output in eine Datei.
                                         AStringList.SaveToFile('output.txt');
                                          for zeilennr:=0 to AStringList.Count-1 do begin
                                                writeln(AStringList[zeilennr]);
                                                end;
                                         // Nun da die Datei gespeichert ist können wir
                                         // TStringList und TProcess freigeben.
                                         AStringList.Free;
                                         AProcess.Free;
 
                                           end;
                                      '-h','-help','--help':
                                         begin
                                              writeln(' ');
                                              writeln('Hilfe ');
                                              {$IFDEF WIN32}
                                              writeln(' Programmaufruf: qrg.exe VFOa;VFOb;mode ');
                                              writeln(' oder ');
                                              writeln(' qrg.exe -l fuer eine liste der verfuegbaren TRX');
                                              writeln(' qrg.exe -h fuer diese hilfe');
                                              {$ENDIF}
                                              {$IFDEF LINUX}
                                              writeln(' Programmaufruf: qrg VFOa;VFOb;mode ');
                                              writeln(' oder ');
                                              writeln(' qrg -l für eine liste der verfügbaren TRX');
                                              writeln(' qrg -h für diese hilfe');
                                              {$ENDIF}
                                              writeln(' ');
                                              writeln(' Die Datei qrg.ini mus angepast werden');
                                              writeln(' Port, Geschwindigkeit, TRX Nr. sihe qrg -l');
                                              writeln(' ');
                                         end;
                                     else
                                         begin
                                         befstr :='rigctl -m ' + trx + ' -s '+speed+' -r '+port+' F ' ;
                                         zeile := ParamStr(1);
                                         zeile := StringReplace(zeile, 'qrg://', '', [rfReplaceAll]);
                                         PositionA := Pos(';', zeile)-1;
                                         VFOa  := Trim(Copy(zeile, 1, PositionA));
                                         VFOa :=  StringReplace(VFOa, '.', '', [rfReplaceAll]);
                                         befstr := befstr + VFOa;
 
                                         Delete(zeile, 1, Length(VFOa)+3);
 
                                         PositionB := Pos(';', zeile)-1;
 
                                           writeln(' zeile: '+ zeile);
                                         VFOb := Trim(Copy(zeile, 1, PositionB));
                                         VFOb := StringReplace(VFOb, '.', '', [rfReplaceAll]);
                                         writeln(' zeile vor delete: '+ zeile);
 
                                         Delete(zeile, 1, Length(VFOb)+1);
                                         writeln(' zeile nach : '+ zeile);
                                         PositionA := Pos(';', zeile)-1;
                                         //TRXMode := Trim(Copy(zeile, 1, Length(zeile)) );
                                         TRXMode := Trim(Copy(zeile, 1, PositionA) );
                                         befstr := befstr + ' m '+ TRXMode;
                                          writeln(PositionA );
                                         writeln(' Befehl sieht so aus: '+befstr);
                                         writeln(' zeile: '+ zeile);
                                        writeln(' VFOa: "'+ VFOa + '"');
                                        writeln(' VFOb: "'+ VFOb + '"');
                                        writeln(' TRXMode: "'+ TRXMode + '"');
                                        // RIGCTL aufrufen
                                         AProcess := TProcess.Create(nil);
                                         AStringList := TStringList.Create;
                                         AProcess.CommandLine := rigctlpath+befstr;
                                         AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
                                         AProcess.Execute;
                                         AStringList.LoadFromStream(AProcess.Output);
                                         AStringList.Free;
                                         AProcess.Free;
                                         end;
 
                                 end;// ende case
                            end;
          end
       else
           begin
           writeln('Kann  c:\Program Files (x86)\hamlib-win32-1.2.15.3\bin\rigctl.exe nicht finden');
 
           end;
end.
 
 
 

flotte Grüße
--------

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Externes Programm aufrufen funzt nicht

Beitrag von mse »

FPC TProcess.CommandLine ist AFAIK "deprecated" und nicht immer zuverlässig. IIRC wird empfohlen stattdessen TProcess.Executable und TProcess.Parameters zu verwenden, ich glaube aber nicht, dass dies das Problem ist. Wird denn "rigctl" beendet? Wo bleibt "qrg" stehen oder was wird von "qrg" ausgegeben?

yodi
Beiträge: 22
Registriert: So 11. Jan 2015, 06:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: bei Göttingen
Kontaktdaten:

Re: Externes Programm aufrufen funzt nicht

Beitrag von yodi »

Hi

danke für die antwort

Beide Programme beenden sich nicht
--------

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Externes Programm aufrufen funzt nicht

Beitrag von mse »

Dann würde ich zu Testzwecken "rigctl" ersetzen durch

Code: Alles auswählen

 
[...]
begin
 writeln(paramcount());
 if paramcount() > 0 then begin
  writeln(paramstr(1));
 end;
end;
 

yodi
Beiträge: 22
Registriert: So 11. Jan 2015, 06:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: bei Göttingen
Kontaktdaten:

Re: Externes Programm aufrufen funzt nicht

Beitrag von yodi »

Hi,

Parameter werden übergeben also wird es wohl an meinen Programmcode liegen.
--------

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Externes Programm aufrufen funzt nicht

Beitrag von marcov »

Gibt rigctl vielleicht nur Output auf stderr ? Versuche mal postderrtostdout (oder so etwas) hin zu fügen

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Externes Programm aufrufen funzt nicht

Beitrag von mse »

"rigctl" wird gar nicht beendet.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Externes Programm aufrufen funzt nicht

Beitrag von Michl »

Ich kenne jetzt rigctl nicht, doch soll der Output gelesen werden, solange rigctl noch läuft hilft dir bestimmt: http://wiki.freepascal.org/Executing_Ex ... en_Outputs

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

yodi
Beiträge: 22
Registriert: So 11. Jan 2015, 06:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: bei Göttingen
Kontaktdaten:

Re: Externes Programm aufrufen funzt nicht

Beitrag von yodi »

Hi,

rigctl ist übrigens ein Programm um ein Funkgerät oder Empfänger zu steuern. Ich habe es von hier http://sourceforge.net/projects/hamlib/ ... p_redirect

Nun bekomme ich eine Ausgabe. Aber mit der Fehlermeldung kann ich nichts anfangen und mein Programm wird nicht beendet.
Erst nach drücken der Entertaste wird es beendet.

Code: Alles auswählen

 
 c:\silo\qrg>qrg.exe -l
Unterstuetzte Transceiver
An unhandled exception occurred at $0041A64A :
EAccessViolation : Access violation
  $0041A64A
  $004025AA  main,  line 145 of qrg.lpr
 
 
c:\silo\qrg> Rig #  Mfg                    Model                   Version
   Status
     1  Hamlib                 Dummy                   0.5             Beta
     2  Hamlib                 NET rigctl              0.3             Beta
   101  Yaesu                  FT-847                  0.5             Beta
   103  Yaesu                  FT-1000D                0.0.6           Alpha
   104  Yaesu                  MARK-V FT-1000MP        0.0.5           Alpha
   105  Yaesu                  FT-747GX                0.4.1           Beta
   106  Yaesu                  FT-757GX                0.4.1           Beta
   107  Yaesu                  FT-757GXII              0.4             Stable
   109  Yaesu                  FT-767GX                1.0             Stable
   110  Yaesu                  FT-736R                 0.3             Stable
   111  Yaesu                  FT-840                  0.1             Untested
   113  Yaesu                  FT-900                  0.1             Untested
   114  Yaesu                  FT-920                  2010-08-23      Stable
   115  Yaesu                  FT-890                  0.1             Stable
   116  Yaesu                  FT-990                  0.2.1           Alpha
   117  Yaesu                  FRG-100                 0.4             Beta
   118  Yaesu                  FRG-9600                0.2             Untested
   119  Yaesu                  FRG-8800                0.2             Untested
   120  Yaesu                  FT-817                  0.5.1           Beta
   121  Yaesu                  FT-100                  0.4.1           Beta
   122  Yaesu                  FT-857                  0.4             Beta
   123  Yaesu                  FT-897                  0.3.3           Beta
   124  Yaesu                  FT-1000MP               0.1.1           Beta
   125  Yaesu                  MARK-V Field FT-1000MP  0.0.5           Alpha
   126  Yaesu                  VR-5000                 0.2             Alpha
   127  Yaesu                  FT-450                  0.22.1          Beta
   128  Yaesu                  FT-950                  0.22.2          Stable
   129  Yaesu                  FT-2000                 0.22.1          Stable
   130  Yaesu                  FTDX-9000               0.22.1          Untested
   131  Yaesu                  FT-980                  0.1             Alpha
   132  Yaesu                  FT-DX5000               0.22            Alpha
   133  Vertex Standard        VX-1700                 1.1             Alpha
   201  Kenwood                TS-50S                  0.8             Untested
   202  Kenwood                TS-440                  0.8.0.6.1       Alpha
   203  Kenwood                TS-450S                 0.8.1           Beta
   204  Kenwood                TS-570D                 0.8.2           Stable
   205  Kenwood                TS-690S                 0.8.1           Beta
   206  Kenwood                TS-711                  0.8.0.6.1       Untested
   207  Kenwood                TS-790                  0.8.2           Alpha
   208  Kenwood                TS-811                  0.8.0.6.1       Untested
   209  Kenwood                TS-850                  0.8.1           Beta
   210  Kenwood                TS-870S                 0.8.0           Beta
   211  Kenwood                TS-940S                 0.8.0.6.1       Alpha
   213  Kenwood                TS-950SDX               0.8             Beta
   214  Kenwood                TS-2000                 0.8.4           Beta
   215  Kenwood                R-5000                  0.6.1           Alpha
   216  Kenwood                TS-570S                 0.8.1           Stable
   217  Kenwood                TH-D7A                  0.5             Alpha
   219  Kenwood                TH-F6A                  0.5             Beta
   220  Kenwood                TH-F7E                  0.5.1           Beta
   221  Elecraft               K2                      20120615        Beta
   222  Kenwood                TS-930                  0.8             Untested
   223  Kenwood                TH-G71                  0.5             Beta
   224  Kenwood                TS-680S                 0.8.1           Beta
   225  Kenwood                TS-140S                 0.8.1           Beta
   226  Kenwood                TM-D700                 0.5             Beta
   227  Kenwood                TM-V7                   0.5             Beta
   228  Kenwood                TS-480                  0.8.5           Untested
   229  Elecraft               K3/KX3                  20120615        Beta
   230  Kenwood                TRC-80                  0.8             Alpha
   231  Kenwood                TS-590S                 0.8.1           Beta
   232  SigFox                 Transfox                20111223        Alpha
   233  Kenwood                TH-D72A                 0.5.1           Alpha
   234  Kenwood                TM-D710                 0.5             Untested
   302  Icom                   IC-1275                 0.7             Beta
   303  Icom                   IC-271                  0.7             Untested
   304  Icom                   IC-275                  0.7.1           Beta
   306  Icom                   IC-471                  0.7             Untested
   307  Icom                   IC-475                  0.7.1           Beta
   309  Icom                   IC-706                  0.7.1           Untested
   310  Icom                   IC-706MkII              0.7.1           Untested
   311  Icom                   IC-706MkIIG             0.7.2           Stable
   312  Icom                   IC-707                  0.7             Untested
   313  Icom                   IC-718                  0.7.1           Beta
   314  Icom                   IC-725                  0.7.1           Stable
   315  Icom                   IC-726                  0.7             Stable
   316  Icom                   IC-728                  0.7             Untested
   319  Icom                   IC-735                  0.7.1           Beta
   320  Icom                   IC-736                  0.7             Untested
   321  Icom                   IC-737                  0.7             Untested
   322  Icom                   IC-738                  0.7             Untested
   323  Icom                   IC-746                  0.7.1           Beta
   324  Icom                   IC-751                  0.7.1           Beta
   326  Icom                   IC-756                  0.7.1           Alpha
   327  Icom                   IC-756PRO               0.7             Untested
   328  Icom                   IC-761                  0.7.1           Stable
   329  Icom                   IC-765                  0.7             Stable
   330  Icom                   IC-775                  0.7.1           Untested
   331  Icom                   IC-781                  0.7.1           Untested
   332  Icom                   IC-820H                 0.7             Alpha
   334  Icom                   IC-821H                 0.7             Alpha
   335  Icom                   IC-970                  0.7             Untested
   336  Icom                   IC-R10                  0.7             Untested
   337  Icom                   IC-R71                  0.7             Untested
   338  Icom                   IC-R72                  0.7             Untested
   339  Icom                   IC-R75                  0.7             Beta
   340  Icom                   IC-R7000                0.7.0           Alpha
   341  Icom                   IC-R7100                0.7.0           Untested
   342  Icom                   ICR-8500                0.7.1           Beta
   343  Icom                   IC-R9000                0.7.1           Alpha
   344  Icom                   IC-910                  0.7.1           Beta
   345  Icom                   IC-78                   0.7             Untested
   346  Icom                   IC-746PRO               0.7             Stable
   347  Icom                   IC-756PROII             0.7             Alpha
   351  Ten-Tec                Omni VI Plus            0.2             Beta
   352  Optoelectronics        OptoScan535             0.3             Beta
   353  Optoelectronics        OptoScan456             0.3             Beta
   354  Icom                   IC ID-1                 0.7             Untested
   355  Icom                   IC-703                  0.7             Untested
   356  Icom                   IC-7800                 0.7.2           Untested
   357  Icom                   IC-756PROIII            0.7.1           Beta
   358  Icom                   IC-R20                  0.7             Untested
   360  Icom                   IC-7000                 0.7.2           Beta
   361  Icom                   IC-7200                 0.7             Beta
   362  Icom                   IC-7700                 0.7.1           Stable
   363  Icom                   IC-7600                 0.7             Beta
   364  Ten-Tec                Delta II                0.1             Untested
   365  Icom                   IC-92D                  0.7             Untested
   366  Icom                   IC-R9500                0.7.1           Untested
   367  Icom                   IC-7410                 0.7             Untested
   368  Icom                   IC-9100                 0.7             Untested
   369  Icom                   IC-RX7                  0.7             Untested
   401  Icom                   IC-PCR1000              0.8             Beta
   402  Icom                   IC-PCR100               0.8             Beta
   403  Icom                   IC-PCR1500              0.8             Beta
   404  Icom                   IC-PCR2500              0.8             Beta
   501  AOR                    AR8200                  0.6.1           Alpha
   502  AOR                    AR8000                  0.6.1           Beta
   503  AOR                    AR7030                  0.4.1           Beta
   504  AOR                    AR5000                  0.6.1           Beta
   505  AOR                    AR3030                  0.4             Untested
   506  AOR                    AR3000A                 0.5             Beta
   508  AOR                    AR2700                  0.6             Untested
   513  AOR                    AR8600                  0.6.1           Beta
   514  AOR                    AR5000A                 0.6             Alpha
   515  AOR                    AR7030 Plus             0.1             Beta
   516  AOR                    SR2200                  0.1             Beta
   605  JRC                    NRD-525                 0.1             Alpha
   606  JRC                    NRD-535D                0.6             Stable
   607  JRC                    NRD-545 DSP             0.6             Beta
   801  Uniden                 BC780xlt                0.3             Untested
   802  Uniden                 BC245xlt                0.3             Untested
   803  Uniden                 BC895xlt                0.3             Untested
   804  Radio Shack            PRO-2052                0.3             Untested
   806  Uniden                 BC250D                  0.3             Untested
   810  Uniden                 BCD-396T                0.3             Alpha
   811  Uniden                 BCD-996T                0.3             Alpha
   812  Uniden                 BC898T                  0.3             Untested
   902  Drake                  R-8A                    0.5.1           Beta
   903  Drake                  R-8B                    0.5             Untested
  1004  Lowe                   HF-235                  0.3             Alpha
  1103  Racal                  RA6790/GM               0.1             Untested
  1105  Racal                  RA3702                  0.1             Alpha
  1204  Watkins-Johnson        WJ-8888                 0.2             Untested
  1402  Skanti                 TRP8000                 0.2             Untested
  1404  Skanti                 TRP 8255 S R            0.1             Untested
  1508  Winradio               WR-G303                 0.2.1           Beta
  1509  Winradio               WR-G313                 0.1             Beta
  1510  Winradio               WR-G305                 0.2.1           Untested
  1601  Ten-Tec                TT-550                  0.2             Beta
  1602  Ten-Tec                TT-538 Jupiter          0.6             Beta
  1603  Ten-Tec                RX-320                  0.6             Stable
  1604  Ten-Tec                RX-340                  0.3             Untested
  1605  Ten-Tec                RX-350                  0.1             Untested
  1607  Ten-Tec                TT-516 Argonaut V       0.2             Stable
  1608  Ten-Tec                TT-565 Orion            0.5             Beta
  1609  Ten-Tec                TT-585 Paragon          0.3             Beta
  1611  Ten-Tec                TT-588 Omni VII         0.3             Alpha
  1612  Ten-Tec                RX-331                  0.1             Beta
  1613  Ten-Tec                TT-599 Eagle            0.4             Untested
  1701  Alinco                 DX-77                   0.7             Beta
  1801  Kachina                505DSP                  0.3             Alpha
  2201  TAPR                   DSP-10                  0.2             Alpha
  2301  Flex-radio             SDR-1000                0.2             Untested
  2303  DTTS Microwave Society DttSP IPC               0.2             Alpha
  2304  DTTS Microwave Society DttSP UDP               0.2             Alpha
  2401  RFT                    EKD-500                 0.4             Alpha
  2501  Elektor                Elektor 3/04            0.4             Stable
  2502  SAT-Schneider          DRT1                    0.2             Beta
  2503  Coding Technologies    Digital World Traveller 0.1.1           Stable
  2506  AmQRP                  DDS-60                  0.1             Alpha
  2507  Elektor                Elektor SDR-USB         0.3.1           Stable
  2508  mRS                    miniVNA                 0.1             Alpha
  2509  SoftRock               Si570 AVR-USB           0.2             Beta
  2511  KTH-SDR kit            Si570 PIC-USB           0.2             Beta
  2512  FiFi                   FiFi-SDR                0.5             Beta
  2513  AMSAT-UK               FUNcube Dongle          0.2             Beta
  2514  N2ADR                  HiQSDR                  0.2             Untested
  2701  Rohde&Schwarz          ESMC                    0.1             Alpha
  2702  Rohde&Schwarz          EB200                   0.1             Untested
  2801  Philips/Simoco         PRM8060                 0.1             Alpha
  2901  ADAT http://www.adat.ch       ADT-200A                1.36            Beta
 
 
--------

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Externes Programm aufrufen funzt nicht

Beitrag von pluto »

Meiner Meinung hast du hier ein \ vergessen:

Code: Alles auswählen

 rigctlpath := 'c:\Program Files (x86)\hamlib-win32-1.2.15.3\bin\';
       if FileExists(rigctlpath+'rigctl.exe') then
MFG
Michael Springwald

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Externes Programm aufrufen funzt nicht

Beitrag von marcov »

Die Deutsche Hilfe ist schwer veraltet, nutze runcommand.

zb

Code: Alles auswählen

 
// mode delphi or objfpc
var outputstring,rigbinary:ansistring;
 
rigbinary:=IncludeTrailingPathDelimiter(rigctlpath)+'rigctl.exe';
ok:=fileexists(rigbinary) and RunCommand(rigbinary,['arg1','arg2','arg3'], outputstring);
if ok then 
  writeln(outputstring);
 
 
oder

Code: Alles auswählen

 
var outputstring,rigbinary:ansistring;
      argumenten: array of string;
 
setlength(argumenten,7); // 0..6 = 7 Elementen
argumenten[0]:=' -m';
argumenten[1]:=trx 
argumenten[2]:='-s'
argumenten[3]:=speed;
argumenten[4]:='-r';
argumenten[5]:=port;
argumenten[6]:='F';
// usw, immer ein Argument per Linie.  -s speed sind zwei Argumenten.
 
rigbinary:=IncludeTrailingPathDelimiter(rigctlpath)+'rigctl.exe';
ok:=fileexists(rigbinary) and RunCommand(rigbinary,argumenten, outputstring);
if ok then 
  writeln(outputstring);
 
P.s. Fuer die TProcess Profi's: auch das "große Output" Szenario ist nicht komplett. Ein Prozess das abwechselnd Blocken nach stderr und stdout schreibt, und eine diese Blocken ist sehr groß (5-10MB+), dann kann dass Output in eine endlose Schleife geraten. Runcommand in 3.0 wird dafür gefixed sein. Manuelle Implementationen des "große Output" Szenarios müssen das selber Reparieren. Nutze darum wenn möglich Runcommand, auch um der nächster Detail-fix vor zu sein.

P.s.2. Es soll keinen neuen Code mehr geschrieben worden der .Commandline nutzt

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Externes Programm aufrufen funzt nicht

Beitrag von mse »

yodi hat geschrieben: Nun bekomme ich eine Ausgabe. Aber mit der Fehlermeldung kann ich nichts anfangen und mein Programm wird nicht beendet.

Code: Alles auswählen

 
 c:\silo\qrg>qrg.exe -l
Unterstuetzte Transceiver
An unhandled exception occurred at $0041A64A :
EAccessViolation : Access violation
  $0041A64A
  $004025AA  main,  line 145 of qrg.lpr
 
Was steht in "line 145 of qrg.lpr"?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Externes Programm aufrufen funzt nicht

Beitrag von pluto »

Die Fehlermeldung besagt, dass du wohl auf ein Objekt/Klasse zugreifst, die du nicht Installisiert hast.
MFG
Michael Springwald

yodi
Beiträge: 22
Registriert: So 11. Jan 2015, 06:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: bei Göttingen
Kontaktdaten:

Re: Externes Programm aufrufen funzt nicht

Beitrag von yodi »

Hi,

ich habe jetzt folgenden Code:

Code: Alles auswählen

 
ok:=fileexists(rigbinary);
 writeln('fileexist'); writeln(ok);
 if ok then
             begin
                     ok:= RunCommand(rigbinary,argumenten,outputstring);
                    if ok then
                                  begin
                                           writeln('rigctl wird gestertet');
                                            writeln(outputstring);
                                   end
                      else
                                  begin
                                    writeln('Error: Befehl geht nicht');
                                 end;
             end;    
 
Von rigctl.exe hab ich immer noch keine Ausgabe. Ich habe da mal eine test.bat reingepackt und aufgerufen das geht.
--------

yodi
Beiträge: 22
Registriert: So 11. Jan 2015, 06:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: bei Göttingen
Kontaktdaten:

Re: Externes Programm aufrufen funzt nicht

Beitrag von yodi »

Fehler gefunden :D

Falsch -> argumenten[0]:=' -l';
Richtig -> argumenten[0]:='-l';

vor dem Minuszeichen war ein Leerzeichen. Das gehört da nicht hin
--------

Antworten