![]() |
Re: .exe datei im Programm erstellen
Zitat:
Delphi-Quellcode:
ShellExecute(0,Nil,'ppc386.exe', '"C:\Programm.pas" -FuC:\Units', 'C:\Freepascal\bin\i386-win32',SW_NORMAL);
|
Re: .exe datei im Programm erstellen
Ja nun haben wir den Compiler aufgerufen? oder nicht? ja und wo ist die .exe die entstehen soll? es geht so weit alles also wenn ich das ausführe kommt für kurze zeit so ein "CMD Fenster" aber dann passiert nichts.
|
Re: .exe datei im Programm erstellen
C:\Programm.exe müsste danach existieren.
|
Re: .exe datei im Programm erstellen
Es sei denn, du versuchst das Ganze auf C:\ unter Vista oder Win7. Dann nicht. ;)
|
Re: .exe datei im Programm erstellen
Ja habe Vista , aber ich erstelle das nicht Direkt auf C:\ sondern im einem Ordner
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin ShellExecute(0,Nil,'ppc386.exe', '"C:\Users\mathias\delphi programme\exe\programm.pas" -FuC:\Units', 'C:\Freepascal\bin\i386-win32',SW_NORMAL); end; |
Re: .exe datei im Programm erstellen
Ich benutze auch Win7 und bei mir läuft's zumindest als Admin. Als eingeschränkter Nutzer weiß ich nicht.
|
Re: .exe datei im Programm erstellen
Ja ich bin auch Admin...
|
Re: .exe datei im Programm erstellen
Dann versuchs einfach mal mit anderen Pfaden (Desktop etc.)
|
Re: .exe datei im Programm erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Es ist möglich, dass ein Programm eine Kopie von sich selbst gezielt verändert.
Es ist zwar nicht empfehlenswert (Virenscanner schlagen Alarm,...) aber immerhin möglich. Dazu benötigt man in den Daten ein "magisches Wort". Beispiel:
Delphi-Quellcode:
Dieser String ist später in der Exedatei enthalten.
var
globalConfigData:Ansistring = '@magicword@'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0; Die Reihe von #0 dient als Platzhalter für die Konfigdaten. Ein Programm lädt seine eigene Exe als String in den Speicher, verändert die Daten nach dem Magischen Wort und schreibt diese Daten unter einem neuen Dateinamen auf die Platte. Demo im Anhang! |
Re: .exe datei im Programm erstellen
Ich denke ich mache was Grundlegendes verkehrt.
So gehe ich vor: Ich erstelle ein neues Formular so mache damit erst mal gar nichts speichere es auf dem Destop als Programm.pas und und Project speichere ich gar nicht ab ( Muss ich das )? So nun ist auf dem Destop die Programm.pas soweit so gut . Ich Starte wieder Delphi und lege eine neue Unit an auf der form ist ein Button der soll das machen :
Delphi-Quellcode:
So geht auch ohne fehler Meldung durch aber es wird keine programm.exe erstellt.
procedure TForm1.Button1Click(Sender: TObject);
begin ShellExecute(0,Nil,'ppc386.exe', '"C:\Users\mathias\Desktop\programm.pas" -FuC:\Units', 'C:\FPC\2.4.0\bin\i386-win32',SW_NORMAL); end; end. |
Re: .exe datei im Programm erstellen
Oh ja, du machst etwas grundlegendes verkehrt.
Geh erst einmal von einem ganz einfachen Konsolen-Programm aus:
Delphi-Quellcode:
Auf Formularanwendungen kannst du später noch zurückkommen.
program Echo;
uses crt; var s: string; begin ReadLn(s); WriteLn(s); Delay(2000); end. Erst einmal müssen sich solche einfachen Progs kompilieren lassen. [EDIT] Das war Programm.pas/Programm.dpr/Programm.lpr/Programm.pp/Programm.p oder wie auch immer du die Datei nennst. Das aufrufende Programm kann natürlich auch eine Formularanwendung sein. |
Re: .exe datei im Programm erstellen
dann versuche es mal mit dem Projekt und .dpr statt dem .pas in den Parametern
In Delphi machst duauch aus der DPR die EXE und nicht aus einzelnen PAS. |
Re: .exe datei im Programm erstellen
Die Dateiendung ist egal. Hauptsache es handelt sich um ein Programm und KEINE Unit.
Aus Units macht FPC bloß Objektdateien und PPU's (ähnlich wie DCU's). |
Re: .exe datei im Programm erstellen
Geht alles nicht...
@implementation Kannste mir mal sagen wie du vor gehst? |
Re: .exe datei im Programm erstellen
1. Schritt:
Du erstellst C:\Programm.pas (dafür kannst du Delphi benutzen, oder einen einfachen Texteditor oder Notepad++ oder was du willst). Als einfache Konsolenanwendung. Ganz ohne Forms. Mit folgendem Inhalt:
Delphi-Quellcode:
2. Schritt:
program Programm;
uses crt; var s: string; begin ReadLn(s); WriteLn(s); Delay(2000); end. Du erstellst ein normales Delphi-Programm. Darin rufst du mit ShellExecute den FPC auf (Parameter: "C:\Programm.pas"). |
Re: .exe datei im Programm erstellen
Oke geht ... geht das nun auch mit Formularen? Nein!
wie mache ich das nun mit Formularen? |
Re: .exe datei im Programm erstellen
Wenn die Zielanwendung nun Formulare enthalten soll, dann gibt es 3 Möglichkeiten:
[EDIT] Theoretisch könntest du auch meine ![]() |
Re: .exe datei im Programm erstellen
Zitat:
|
Re: .exe datei im Programm erstellen
1. Du besorgst dir die LCL.
2. Du bindest die Units ins Zielprogramm ein. 3. Du erstellst im Zielprogramm dynamisch die Forms. |
Re: .exe datei im Programm erstellen
Ich habe mal ein Testprojekt für die LCL geschrieben.
Es gibt leider ein paar Fehler beim Linken:
Code:
Weiß jemand was darüber?
Free Pascal Compiler version 2.2.4 [2009/04/10] for i386
Copyright (c) 1993-2008 by Florian Klaempfl Target OS: Win32 for i386 Compiling C:\Users\Marvin\Desktop\lcltest.pas Linking C:\Users\Marvin\Desktop\lcltest.exe lcltest.pas(13,1) Error: Undefined symbol: WSRegisterCustomImageList lcltest.pas(13,1) Error: Undefined symbol: WSRegisterMenuItem lcltest.pas(13,1) Error: Undefined symbol: WSRegisterMenu lcltest.pas(13,1) Error: Undefined symbol: WSRegisterMainMenu lcltest.pas(13,1) Error: Undefined symbol: WSRegisterPopupMenu lcltest.pas(13,1) Error: Undefined symbol: WSRegisterDragImageList lcltest.pas(13,1) Error: Undefined symbol: WSRegisterControl lcltest.pas(13,1) Error: Undefined symbol: WSRegisterWinControl lcltest.pas(13,1) Error: Undefined symbol: WSRegisterGraphicControl lcltest.pas(13,1) Error: Undefined symbol: WSRegisterCustomControl lcltest.pas(13,1) Error: Undefined symbol: WSRegisterScrollingWinControl lcltest.pas(13,1) Error: Undefined symbol: WSRegisterScrollBox lcltest.pas(13,1) Error: Undefined symbol: WSRegisterCustomFrame lcltest.pas(13,1) Error: Undefined symbol: WSRegisterCustomForm lcltest.pas(13,1) Error: Undefined symbol: WSRegisterHintWindow lcltest.pas(13,1) Fatal: There were 15 errors compiling module, stopping Fatal: Compilation aborted Sonst muss Phantom doch die NWL nehmen :mrgreen: *eigenwerbungmach* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 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