![]() |
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. |
Re: Für Linux compilen
Zitat:
|
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". |
Re: Für Linux compilen
Also mein Quellcode sieht aktuell so aus:
Delphi-Quellcode:
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.
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. 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. |
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) |
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 |
Re: Für Linux compilen
Hallo RedShakal, siehe folgenden Thread.
![]() lg. Astat |
Re: Für Linux compilen
Zwei der Meldungen kannst du evtl. lösen, indem du folgende Direktive benutzt:
Delphi-Quellcode:
{$mode delphi}
|
Re: Für Linux compilen
Unter FPC werden events durch Adressen verknüpft. Also z.B.
Delphi-Quellcode:
Außerdem musst du die Indy-Komponenten für Lazarus kompilieren und installieren.
IdTCPServer1.OnConnect := @IdTCPServer1Connect;
IdTCPServer1.OnExecute := @IdTCPServer1Execute; (Bei dem einfachen Programm würde ich das aber mit Synapse oder LNet neu schreiben, das ist wesentlich stressfreier und vor allem schneller.) |
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. |
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