AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Programm bei Systemstart ausführen wie chkdsk?

Programm bei Systemstart ausführen wie chkdsk?

Ein Thema von jus · begonnen am 1. Aug 2012 · letzter Beitrag vom 10. Aug 2012
Antwort Antwort
Seite 3 von 3     123
jus

Registriert seit: 22. Jan 2005
166 Beiträge
 
Delphi 2007 Professional
 
#21

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 9. Aug 2012, 13:45

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? Ich gebe zu, ich habe keinen Durchblick beim Build-Prozeß.

Lg,
jus
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: Eberfing
590 Beiträge
 
FreePascal / Lazarus
 
#22

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 9. Aug 2012, 21:34
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 )
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
Sven
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
166 Beiträge
 
Delphi 2007 Professional
 
#23

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 10. Aug 2012, 00:37
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 :
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...

lg,
jus
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
35.186 Beiträge
 
Delphi 2006 Professional
 
#24

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 10. Aug 2012, 02:14
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/
Michael
"Every language has an optimization operator. In Delphi that operator is: //"
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
166 Beiträge
 
Delphi 2007 Professional
 
#25

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 10. Aug 2012, 02:15
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...
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

Geändert von jus (10. Aug 2012 um 02:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: Eberfing
590 Beiträge
 
FreePascal / Lazarus
 
#26

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 10. Aug 2012, 09:53
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 TLargeInteger heißt nun wie der entsprechende C-Typ LARGE_INTEGER und TNtUnicodeString wurde ebenfalls in UNICODE_STRING umbenannt. Beide befinden sich in der Unit 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
Sven
this post is printed on 100% recycled electrons

Geändert von JamesTKirk (10. Aug 2012 um 09:53 Uhr) Grund: Ns in die richtige Reihenfolge gebracht
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf