Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Programm bei Systemstart ausführen wie chkdsk? (https://www.delphipraxis.net/169637-programm-bei-systemstart-ausfuehren-wie-chkdsk.html)

jus 9. Aug 2012 12:45

AW: Programm bei Systemstart ausführen wie chkdsk?
 
Zitat:

Zitat von JamesTKirk (Beitrag 1177433)

Wenn ich nur wüsste, warum er die x86 Unit (Unix only) mitkopieren möchte... Dann lass das "install" weg und kopier die RTL Units manuell wie oben beschrieben... (die "packages" sollten aber funktionieren ;) ).

Gruß,
Sven

Ich habe nun im rtl Verzeichnis den "install"-Parameter weggelassen spricht mit folgenden Befehl den build erzeugt:
Code:
make clean all OS_TARGET=nativent CPU_TARGET=i386 FPC=%DEIN_INSTALL_DIR%\i386-win32\fpc.exe INSTALL_PREFIX=%DEIN_INSTALL_DIR%
Und die units Dateien manuell nach "%DEIN_INSTALL_DIR%\units\i386-nativent\rtl" kopiert.
Danach habe ich folgenden Befehl im Verzeichnis "packages" erfolgreich ausgeführt:
Code:
make clean install all OS_TARGET=nativent CPU_TARGET=i386 FPC=%DEIN_INSTALL_DIR%\i386-win32\fpc.exe INSTALL_PREFIX=%DEIN_INSTALL_DIR%
Ähm.... und was wäre der nächste Schritt? :oops: Ich gebe zu, ich habe keinen Durchblick beim Build-Prozeß. :duck:

Lg,
jus

JamesTKirk 9. Aug 2012 20:34

AW: Programm bei Systemstart ausführen wie chkdsk?
 
Jetzt solltest du im Endeffekt in der Lage sein mit dem FPC in deinem 2.7.1 Installations Verzeichnis Native NT Anwendungen zu erzeugen (wobei du dich für's erste am besten auf primitive Units ala SysUtils und Classes beschränken solltest).

Du musst FPC dabei folgendermaßen aufrufen:

Code:
%DEIN_INSTALL_DIR%\bin\i386-win32\fpc.exe -Tnativent {sonstige optionen} deinsource.pas
Zu den {sonstige optionen} kannst du einfach fpc mit "-h" aufrufen und dir die Ausgabe mal anschauen. Vor allem so Optionen wie "Unit output directory" und "Unit search dir" (falls du mal eine schnuckelige Verzeichnisstruktur anlegst) sind sehr hilfreich.

Als kleiner Tipp noch: Ich empfehle dir (für's erste) eine VM einzurichten (zum Beispiel mit ReactOS), mit der du die Programme dann ohne Gefahr für dein Produktionssystem testen kannst. Für's genaue Einrichten verweise ich dich auf die Native NT Wiki Seite, wobei du natürlich gerne hier Rückfragen stellen kannst ;) (in naher Zukunft möchte ich dann noch mein oben genanntes Tool bei FPC mit integrieren, damit man NT Anwendungen einfach von Win32 aus laufen lassen kann; das brauch ich für die Testsuite von FPC :mrgreen: )
Außerdem solltest du die Unit "ndkutils" einbinden und dann direkt nach dem Haupt-"begin" einmal "AssignDisplayString(Output, False);" aufrufen, damit du mittels Writeln auf's Display schreiben kannst (normalerweise geht das auf StdOut, aber beim ersten Programm, dass gestartet wird, ist dieses noch nicht gesetzt)

Gruß,
Sven

jus 9. Aug 2012 23:37

AW: Programm bei Systemstart ausführen wie chkdsk?
 
Also wenn ich folgenden Befehl starte:
Code:
c:\fpc\build\bin\i386-win32\fpc.exe -Tnativent helloworld.pas
wobei das helloworld.pas genau das demo von der freepascal-wiki mit folgenden Code:
Delphi-Quellcode:
program helloworld;
 
uses
  // as WriteLn is not supported, yet, we need to
  // use the functions provided by the kernel directly
  NDK, NDKUtils;
 
var
  ntstr: TNtUnicodeString;
  interval: TLargeInteger;
begin
  ShortStrToNtStr('Hello World!'#13#10, ntstr);
  NtDisplayString(@ntstr);
  FreeMem(ntstr.buffer);
 
  // wait 3 seconds
  interval.QuadPart := - 3000 * 10000;
  NtDelayExecution(@interval);
end.
So kommt folgende Fehlermeldung :oops: :
Code:
C:\FPC>c:\fpc\build\bin\i386-win32\fpc.exe -Tnativent helloworld.pas
helloworld.pas(10,26) Error: Identifier not found "TLargeInteger"
helloworld.pas(10,26) Error: Error in type definition
helloworld.pas(17,12) Error: Illegal qualifier
helloworld.pas(18,3) Error: Wrong number of parameters specified for call to "Nt
DelayExecution"
helloworld.pas(19,4) Fatal: There were 4 errors compiling module, stopping
Fatal: Compilation aborted
Error: c:\fpc\build\bin\i386-win32\ppc386.exe returned an error exitcode

C:\FPC>
sprich irgendwas funktioniert da nicht... :cry:

lg,
jus

Luckie 10. Aug 2012 01:14

AW: Programm bei Systemstart ausführen wie chkdsk?
 
Hm, frag mal bei Assarbad nach. Hier Olli oder so. Mit dem habe ich mal so was gemacht oder versucht zu machen. Link: http://assarbad.net/

jus 10. Aug 2012 01:15

AW: Programm bei Systemstart ausführen wie chkdsk?
 
Zitat:

Zitat von Luckie (Beitrag 1177609)
Hm, frag mal bei Assarbad nach. Hier Olli oder so. Mit dem habe ich mal so was gemacht oder versucht zu machen. Link: http://assarbad.net/

Vielen Dank Luckie, aber ich habs hingekriegt. Yeahh... :dancer:
Vielen vielen Dank an Sven!
Ich bin wohl von falschen Erwartungen ausgegangen. Ich dachte, dass das helloworld Beispiel auf Anhieb funktionieren sollte. Damit es sich kompilieren ließ, habe ich den Source folgendermaßen verändert:
Delphi-Quellcode:
program helloworld;
 
uses
  // as WriteLn is not supported, yet, we need to
  // use the functions provided by the kernel directly
  NDK, NDKUtils;

type
 TNtUnicodeString = UNICODE_STRING;
 
   // using Int64 is an alternative (QWord might have unintended side effects)
  TLargeInteger = packed record
    case Boolean of
      True:(LowPart: LongWord;
            HighPart: LongInt);
      False:(QuadPart: Int64);
  end;
  PLargeInteger = ^TLargeInteger;

 
var
  ntstr: TNtUnicodeString;
  interval: TLargeInteger;
begin
  ShortStrToNtStr('Hello World!'#13#10, ntstr);
  NtDisplayString(@ntstr);
  FreeMem(ntstr.buffer);
 
  // wait 3 seconds
  interval.QuadPart := - 3000 * 10000;
  NtDelayExecution(FALSE,@interval);
end.
Lg,
jus

JamesTKirk 10. Aug 2012 08:53

AW: Programm bei Systemstart ausführen wie chkdsk?
 
Zitat:

Zitat von jus (Beitrag 1177610)
Ich bin wohl von falschen Erwartungen ausgegangen. Ich dachte, dass das helloworld Beispiel auf Anhieb funktionieren sollte. Damit es sich kompilieren ließ, habe ich den Source folgendermaßen verändert:

Mea culpa! Ich muss echt mal den Wikieintrag aktualisieren... -.-

Der Typ
Delphi-Quellcode:
TLargeInteger
heißt nun wie der entsprechende C-Typ
Delphi-Quellcode:
LARGE_INTEGER
und
Delphi-Quellcode:
TNtUnicodeString
wurde ebenfalls in
Delphi-Quellcode:
UNICODE_STRING
umbenannt. Beide befinden sich in der Unit
Delphi-Quellcode:
ndk
, welche ja bereits eingebunden ist.

Das Programm sollte übrigens äquivalent zu folgendem sein:

Delphi-Quellcode:
program helloworld;

uses
  // für Sleep
  sysutils,
  // für AssignDisplayString
  ndkutils;

begin
  // damit wir einfach Writeln benutzen können
  AssignDisplayString(Output, False);
 
  // kleine Ausgabe
  Writeln('Hello World!');

  // verwendet intern NtDelayExecution
  Sleep(3000);
end.
Gruß,
Sven

jus 23. Apr 2015 02:07

AW: Programm bei Systemstart ausführen wie chkdsk?
 
Hallo Sven,

ich habe mir soeben auf einen neuen PC eine neue FPC 2.6.4 runtergeladen und es scheint, dass die nativent rtl nicht mit folgenden Befehl erstellen läßt.

Code:
make clean all OS_TARGET=nativent CPU_TARGET=i386 FPC=%DEIN_INSTALL_DIR%\i386-win32\fpc.exe INSTALL_PREFIX=%DEIN_INSTALL_DIR%
Wie ist der aktuelle Stand der Entwicklung?

Lg,
jus


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr.
Seite 3 von 3     123   

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