![]() |
AW: Programm bei Systemstart ausführen wie chkdsk?
Zitat:
Code:
Und die units Dateien manuell nach "%DEIN_INSTALL_DIR%\units\i386-nativent\rtl" kopiert.
make clean all OS_TARGET=nativent CPU_TARGET=i386 FPC=%DEIN_INSTALL_DIR%\i386-win32\fpc.exe INSTALL_PREFIX=%DEIN_INSTALL_DIR%
Danach habe ich folgenden Befehl im Verzeichnis "packages" erfolgreich ausgeführt:
Code:
Ähm.... und was wäre der nächste Schritt? :oops: Ich gebe zu, ich habe keinen Durchblick beim Build-Prozeß. :duck:
make clean install all OS_TARGET=nativent CPU_TARGET=i386 FPC=%DEIN_INSTALL_DIR%\i386-win32\fpc.exe INSTALL_PREFIX=%DEIN_INSTALL_DIR%
Lg, jus |
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:
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.
%DEIN_INSTALL_DIR%\bin\i386-win32\fpc.exe -Tnativent {sonstige optionen} deinsource.pas
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 ![]() 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 |
AW: Programm bei Systemstart ausführen wie chkdsk?
Also wenn ich folgenden Befehl starte:
Code:
wobei das helloworld.pas genau das demo von der
c:\fpc\build\bin\i386-win32\fpc.exe -Tnativent helloworld.pas
![]()
Delphi-Quellcode:
So kommt folgende Fehlermeldung :oops: :
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.
Code:
sprich irgendwas funktioniert da nicht... :cry:
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> lg, jus |
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:
![]() |
AW: Programm bei Systemstart ausführen wie chkdsk?
Zitat:
Vielen vielen Dank an Sven! Ich bin wohl von falschen Erwartungen ausgegangen. Ich dachte, dass das ![]()
Delphi-Quellcode:
Lg,
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. jus |
AW: Programm bei Systemstart ausführen wie chkdsk?
Zitat:
Der Typ
Delphi-Quellcode:
heißt nun wie der entsprechende C-Typ
TLargeInteger
Delphi-Quellcode:
und
LARGE_INTEGER
Delphi-Quellcode:
wurde ebenfalls in
TNtUnicodeString
Delphi-Quellcode:
umbenannt. Beide befinden sich in der Unit
UNICODE_STRING
Delphi-Quellcode:
, welche ja bereits eingebunden ist.
ndk
Das Programm sollte übrigens äquivalent zu folgendem sein:
Delphi-Quellcode:
Gruß,
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. Sven |
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:
Wie ist der aktuelle Stand der Entwicklung?
make clean all OS_TARGET=nativent CPU_TARGET=i386 FPC=%DEIN_INSTALL_DIR%\i386-win32\fpc.exe INSTALL_PREFIX=%DEIN_INSTALL_DIR%
Lg, jus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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