Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Für Linux compilen (https://www.delphipraxis.net/144878-fuer-linux-compilen.html)

implementation 19. Dez 2009 10:51

Re: Für Linux compilen
 
Wieso benutzt du Wine?
Du kannst das Programm doch einfach nativ für Linux compilieren.
Dann brauchst du Wine gar nicht mehr.

Phoenix 19. Dez 2009 10:57

Re: Für Linux compilen
 
Zitat:

Zitat von implementation
Du kannst das Programm doch einfach nativ für Linux compilieren.

Dann erklär ihm doch mal etwas detaillierter wie er das mit FPC macht ;-)

implementation 19. Dez 2009 11:20

Re: Für Linux compilen
 
Wenn er eine Konsolenanwendung haben will muss er einfach nur die IDE öffnen,
de´n Quelltext laden und eventuell noch den Quelltext so umschreiben, dass er nichts Windows-spezifisches benutzt.
Dann auf das Menü "Run" klicken und je nach Wunsch auf den Menüpunkt "Compile" oder "Run".

RedShakal 19. Dez 2009 17:41

Re: Für Linux compilen
 
Also mein Quellcode sieht aktuell so aus:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils, windows, IdTCPServer, IdContext, IdBaseComponent, IdComponent, ComCtrls;
type
 TServer = class(TObject)
   IdTCPServer1: TIdTCPServer;
   procedure IdTCPServer1Execute(AThread: TIdContext);
   procedure IdTCPServer1Connect(AThread: TIdContext);
 private
   { Private declarations }
   constructor Create;
 public
   { Public declarations }
 end;

 Const
   Version = '0.02';

type
  TDynStringArray = Array of string;

function Explode(const Separator, S :String; Limit :Integer = 0): TDynStringArray;
  var
    SepLen: Integer;
    F, P: PChar;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then
    Exit;
  if Separator = '' then
    begin
      SetLength(Result, 1);
      Result[0] := S;
      Exit;
    end;
  SepLen := Length(Separator);

  P := PChar(S);
  while P^ <> #0 do
    begin
      F := P;
      P := AnsiStrPos(P, PChar(Separator));
      if (P = nil) or ((Limit > 0) and (Length(Result) = Limit - 1)) then
        P := StrEnd(F);
      SetLength(Result, Length(Result) + 1);
      SetString(Result[High(Result)], F, P - F);
      F := P;
      if P = Separator then
        SetLength(Result, Length(Result) + 1);
      while (P^ <> #0) and (P - F < SepLen) do
        Inc(P);
    end;
end;


procedure TServer.IdTCPServer1Execute(AThread: TIdContext);
var
  Data   : String;
  StrArr : TDynStringArray;
  LI     :TListItem;
begin
 with AThread.Connection do
 begin
   Data := String(Socket.ReadLn);
   Data := Trim(Data);
   WriteLn(Data);

   if Length(Data) > 0 then
     begin
       StrArr := Explode('|', Data);
         if StrArr[0] = 'login' then
            begin
              if StrArr[3] <> Version then
                begin
                  Socket.WriteLn('version');
                end
              else
                begin
                  if (StrArr[1] = 'test') and (StrArr[2] = '123') then
                    begin
                      Socket.WriteLn('login');
                    end
                else
                  begin
                    Socket.WriteLn('invalid');
                  end;
              end;
            end;
     end;
 end;
end;

procedure TServer.IdTCPServer1Connect(AThread: TIdContext);
begin
  WriteLn('Client verbunden.');
end;

constructor TServer.Create;
begin
 inherited Create;
 WriteLn('#######################');
 WriteLn('##                   ##');
 WriteLn('## Masterserver '+version+' ##');
 WriteLn('##                   ##');
 WriteLn('#######################');
 WriteLn('');
 IdTCPServer1 := TIdTCPServer.Create(nil);
 WriteLn('Server wurde initialisiert.');
 IdTCPServer1.DefaultPort := 5000;
 WriteLn('Server lauscht auf Port: '+InttoStr(IdTCPServer1.DefaultPort));
 IdTCPServer1.TerminateWaitTime := 5000;
 IdTCPServer1.OnConnect := IdTCPServer1Connect;
 IdTCPServer1.OnExecute := IdTCPServer1Execute;
end;

var
 Server : TServer;
begin
 Server := TServer.Create;
 Server.IdTCPServer1.Active := True;
 While True do sleep(10);
end.
Ich hab ihn jetzt mal versucht über ein Linux VMWare mit FPC zu compilen aber irgentwie bin ich anscheiennd zu doof dazu. Wenn ich mit wine emulieren will dann sagt er irgentwas von X-Servern und Grafiktreibern.

An der Stelle wo jetzt if (StrArr[1] = 'test') and (StrArr[2] = '123') then steht versuche ich noch herauszufinden wie ich eine SQL Datenbank benutzen kann was sich leider als weit schwieriger erweißt als erwartet.

implementation 19. Dez 2009 17:57

Re: Für Linux compilen
 
Wo liegt denn das Problem beim FPC? Fehlermeldung?
Welche Version verwendest du? Welches Linux?
Bei ist die FreePascal-IDE /usr/bin/fp
und der Kommandozeilencompiler /usr/bin/fpc
Ich habe Version 2.2.4 auf Debian (lenny)

RedShakal 19. Dez 2009 18:05

Re: Für Linux compilen
 
Project1.dpr(14,4) Warning: Constructor should be public
Project1.dpr(41,8) Error: Illegal type conversion: "ShortString" to "^Char"
Project1.dpr(45,26) Error: Illegal type conversion: "ShortString" to "^Char"
Project1.dpr(114,47) Error: Wrong number of parameters specified for call to "IdTCPServer1Connect"
Project1.dpr(95,19) Hint: Found declaration: TServer.IdTCPServer1Connect(TIdContext);
Project1.dpr(115,47) Error: Wrong number of parameters specified for call to "IdTCPServer1Execute"
Project1.dpr(59,19) Hint: Found declaration: TServer.IdTCPServer1Execute(TIdContext);
Project1.dpr(125) Fatal: There were 4 errors compiling module, stopping

Astat 19. Dez 2009 18:19

Re: Für Linux compilen
 
Hallo RedShakal, siehe folgenden Thread.

http://www.delphipraxis.net/internal...t.php?t=132581

lg. Astat

implementation 19. Dez 2009 18:32

Re: Für Linux compilen
 
Zwei der Meldungen kannst du evtl. lösen, indem du folgende Direktive benutzt:
Delphi-Quellcode:
{$mode delphi}

argonix 19. Dez 2009 18:40

Re: Für Linux compilen
 
Unter FPC werden events durch Adressen verknüpft. Also z.B.
Delphi-Quellcode:
IdTCPServer1.OnConnect := @IdTCPServer1Connect;
IdTCPServer1.OnExecute := @IdTCPServer1Execute;
Außerdem musst du die Indy-Komponenten für Lazarus kompilieren und installieren.
(Bei dem einfachen Programm würde ich das aber mit Synapse oder LNet neu schreiben, das ist wesentlich stressfreier und vor allem schneller.)

implementation 19. Dez 2009 18:57

Re: Für Linux compilen
 
Mit genannter Direktive läuft auch das:
Delphi-Quellcode:
IdTCPServer1.OnConnect := IdTCPServer1Connect;


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz