Und auch statische Links auf Funktionen (
WinAPI) und damit auch auf DLLs,
welche dort nicht vorhanden sind, würden sofort beim Start knallen, noch lange bevor irgendein Code von dir ausgeführt würde.
Fazit: Du mußt deinen Code auslagern (z.B.
DLL oder
BPL), wo dann sonst nichts Böses enthalten ist.
Rate mal, warum ich gern Delayed-Importe nutze
(man kann aber auch dynamische Importe nutzen, also LoadLibrary+GetProcAddress), für Dinge, die eventuell nicht vorhanden sind werden.
Und wer ganz böse ist ... da EXE und
DLL das selbe
PE-Format und die gleiche Eintrittsprozedur implementieren,
könnte man eine EXE auch als
DLL laden (und mit bissl Gekacktem auch andersrum) ... wobei die
DLL als EXE zu laden bissl krank ist und man da besser den DLLHost von Windows für benutzt.
Zitat:
ist keine W32 Anwedung
Das dürfte wohl eher nicht am FMX liegen,
sondern daran, dass aktuelle Delphis eine höhere
PE-Version angeben,
welche
W2K nicht unterstützt / nicht kennt.
Wenn ja, dann wäre es auch egal, ob du so kompilierst, dass FMX garnicht enthalten ist.
Du könntest aber den
PE-Header umschreiben (ich glaub die Version ging auch irgendwie als Compiler-Directive, oder eben nach dem Kompilieren die Bits drehen)
Oder du mußt eben ein älteres Delphi nutzen.
Problem bei Fehlermeldungen wie "ist keine W32 Anwedung" ist aber, dass diese Fehlermeldung garnicht von der EXE selber kommen muß,
sondern es kann auch über eine
DLL kommen, welche geladen werden soll und die dann nicht passt.
(du weißt nicht von wo der Fehlercode kommt, da Microsoft zum GetLastError leider keine ZusatzInfos bereitstellt, also einen "Text", wo z.B. der Dateiname zum Fehlercode drin stünde)
Da kannst du nur mit dem ProcessExplorer schauen, was versucht wird zu laden und das Letze dürfte dann das sein, was wirklich knallt.