AGB  ·  Datenschutz  ·  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 23. Apr 2015
Antwort Antwort
jus

Registriert seit: 22. Jan 2005
350 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 9. Aug 2012, 23: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
jus

Registriert seit: 22. Jan 2005
350 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 10. Aug 2012, 01: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 01:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Programm bei Systemstart ausführen wie chkdsk?

  Alt 10. Aug 2012, 08: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
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons

Geändert von JamesTKirk (10. Aug 2012 um 08:53 Uhr) Grund: Ns in die richtige Reihenfolge gebracht
  Mit Zitat antworten Zitat
Antwort Antwort

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 · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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