Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Netzwerkabbrüche oder Programm schließt sich einfach (https://www.delphipraxis.net/196937-netzwerkabbrueche-oder-programm-schliesst-sich-einfach.html)

Matthias LE 2. Jul 2018 13:07

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Sorry - Ja der Server und die Clients sind alles Windows Maschinen

-habe es nochmal mit deinem letzten Beitrag versucht, da kommt aber wieder die Fehlermeldung "project1.lpr(21,2) Error: Identifier not found "IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP""


Code >>>

program project1;

{$mode objfpc}{$H+}

uses

{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}

{$IFDEF Windows}
Windows,
{$ENDIF}

Interfaces, // this includes the LCL widgetset
Forms, datetimectrls, printer4lazarus, Unit1, Unit2, Unit3, Unit4, Unit5,
Unit6, Unit7, Unit8, Unit9, Unit10, Unit11, Unit12, Unit13, Unit14
{ you can add units after this };

{$IFDEF Windows}
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}
{$ENDIF}


{$R *.res}


begin
RequireDerivedFormResource := True;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TForm5, Form5);
Application.CreateForm(TForm6, Form6);
Application.CreateForm(TForm7, Form7);
Application.CreateForm(TForm8, Form8);
Application.CreateForm(TForm9, Form9);
Application.CreateForm(TForm10, Form10);
Application.CreateForm(TForm11, Form11);
Application.CreateForm(TForm12, Form12);
Application.CreateForm(TForm13, Form13);
Application.CreateForm(TForm14, Form14);
Application.Run;
end.

KodeZwerg 2. Jul 2018 13:19

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Dann fehlen Deiner "Windows.pas" diese Deklarationen oder in Lazarus ist das woanders abgelegt, da bin ich überfragt.
Hier ist die uses wieder bereinigt und die PE-Flags werden nur gesetzt wenn ein Windows Kompilat entsteht.
Ich empfehle Dir mal nach IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP in zusammenhang mit Lazarus zu Suchen, das ist keine so abnormale Konstante.
Delphi-Quellcode:
uses

{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
{$IFDEF Windows}
//Windows,
{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, datetimectrls, printer4lazarus, Unit1, Unit2, Unit3, Unit4, Unit5,
Unit6, Unit7, Unit8, Unit9, Unit10, Unit11, Unit12, Unit13, Unit14
{ you can add units after this };

{$IFDEF Windows}
const
  IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP      = $0400; { If Image is on removable media, copy and run from the swap file. }
  IMAGE_FILE_NET_RUN_FROM_SWAP            = $0800; { If Image is on Net, copy and run from the swap file. }

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}
{$ENDIF}


{$R *.res}

Matthias LE 2. Jul 2018 13:32

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Großes Lob an dich!! So funktioniert es ohne Fehlermeldungen.

KodeZwerg 2. Jul 2018 13:53

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Da Du noch Neu bist mit Programmieren verrate ich Dir auch Warum :)
Ich zerpflücke mal Dein Text und kommentiere hier und da
Delphi-Quellcode:
uses // <- Wir fangen an Units einzubinden die hier gebraucht werden

{$IFDEF UNIX} // <- Wenn Wir Unix verwenden Bedingung
  {$IFDEF UseCThreads} // <- Wenn Wir UseCThreads verwenden Bedingung
    cthreads, // <- treffen beide Bedingungen zu, lade diese Datei und stelle Inhalt zur Verfügung
  {$ENDIF} // das schließt die letzte $IFDEF Bedingung
{$ENDIF} // das schließt die letzte $IFDEF Bedingung

{$IFDEF Windows} // <- Wenn Wir Windows verwenden Bedinung
// Hier sollten alle Units rein die man unter Windows benötigt
//  Windows,
// Da bei Dir "Windows.pas" nicht die Flags enthält brauchen Wir "Windows.pas" auch nicht zu laden
// mit zwei schrägen Strichen am Anfang kann man übrigens Kommentare im Source hinterlassen
// oder wie hier getan die Anweisung "Windows," damit rauskommentiert.
{$ENDIF} // das schließt die letzte $IFDEF Bedingung

...

{$IFDEF Windows} // <- Wenn Wir Windows verwenden Bedinung
const // const Werte sind feste Werte, alles was man hier deklariert bleibt im Normalfall so wie es ist
  IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400; { If Image is on removable media, copy and run from the swap file. }
  IMAGE_FILE_NET_RUN_FROM_SWAP = $0800; { If Image is on Net, copy and run from the swap file. }

// Da Deinem Lazarus die Deklaration IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP und IMAGE_FILE_NET_RUN_FROM_SWAP fehlten
// haben Wir die auf diese Weise selbst hinzugefügt

// Deswegen klappt letztendlich auch das Integrieren dieser speziellen Flags
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}
{$ENDIF} // das schließt die letzte $IFDEF Bedingung

Matthias LE 2. Jul 2018 14:17

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Das nenne ich ja mal eine ausführliche Erklärung. DANKE

Gehen wir mal zurück zum Anfang. Was mich da interessiert ist, wenn wir all diese Anweisungen nicht in den Sourcecode hinterlegen (wie am Anfang geschehen) wie oder was wird denn da überhaupt geladen? (nur ein Teil des Programmes )

KodeZwerg 2. Jul 2018 14:31

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Ohne diese Flags lädt Windows Deine .exe nur bei Bedarf in Speicher, was bei Netzlaufwerken oder CDRoms Fehler verursachen kann.
Beispiel man startet eine Datei von einem Usb-Laufwerk, wenn man das Usb-Laufwerk rauszieht stürzt früher oder später das Programm ab weil es an entsprechender Stelle keine Daten mehr findet.
Mit diesen Flags gesetzt lädt Windows die Datei komplett in den Speicher was zur Folge hat das ein trennen des Laufwerks nicht gleich die Applikation crashen lässt da die Daten nun aus dem Speicher geholt werden.

Dein Problem kann natürlich auch an völlig anderer Stelle sein, das hier wäre nur eine generelle Empfehlung für .exen die nicht Lokal vorliegen.

Matthias LE 2. Jul 2018 14:36

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Super Sache. Ich werde es in Zukunft mit beachten. Danke nochmal an dieser Stelle an dich. :thumb:

KodeZwerg 2. Jul 2018 14:45

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Ja gern geschehen. Wenn es das schon war, wars ja einfach:P
Teste mal ausgiebig, bei weiteren Fehlern muss man sich den Code anschauen, aber wenn ich schon unit1, unit2, unit3 usw. Lese ahne ich schlimmes ^_^

Ps: Der Text-Editor von diesem Forum für Nachrichten hat als Knopf ein Delphi-Symbol, wenn Du wieder Code hier zeigst drücke vorher auf den Knopf und schreibe Deinen Code zwischen die [ Delphi]...Dein Code...[ /Delphi]. Dann liest es sich einfacher und formatierung bleibt ein wenig bei.

Matthias LE 2. Jul 2018 19:33

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Oha... :shock: , das mit den Units würde ich gerne mal näher erläutert haben. Erstellt doch Lazarus diese Units mit jedem neuen Formular von alleine. Das Thema passt aber leider nicht zu diesem Thread.

KodeZwerg 2. Jul 2018 21:03

AW: Netzwerkabbrüche oder Programm schließt sich einfach
 
Meine schlimme Vorahnung hast Du ja bereits mit "Erstellt doch Lazarus diese Units mit jedem neuen Formular von alleine." bewahrheitet.
Es ist ratsam jedes Element Sinnvoll zu benennen, wenn Du in 5 Jahren noch Spass an Lazarus hast und Deinen alten Code rausbuddelst möchtest Du bestimmt nicht erst Tagelang checken "ach was ist Unit666; ist CheckBox666 für Button666 zuständig; wie lautet der Name im allgemeinen". Das hilft Dir selbst und ist für jeden der damit zu tun hat einfach leserlicher. Ein wenig Struktur kann nie Schaden.
Nun brauchst Du dafür keinen neuen Thread erstellen, nur im Hinterkopf behalten das Standardnamen doof sind :-]
Wenn man es sich gleich "gut" angwöhnt schadet es nach hinten hin nie.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.
Seite 2 von 4     12 34      

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