Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Quelltext in Quelltext setzten (https://www.delphipraxis.net/147245-quelltext-quelltext-setzten.html)

IntErES 4. Feb 2010 12:54


Quelltext in Quelltext setzten
 
Hallo Leute,
bin noch ein Anfänger in Sachen Delphi,deswegen habe ich auch,eine für euch wahrscheinlich,"dumme Frage".
Es geht darum das ich in meinen Quelltext einen Quelltext von einem anderen Programm reinsetzten will,darauf sollte ich dann wenn ich mein eigentliches Programm starte zugreifen können,sprich einfach Zeilen auslesen.Bloß wie baue ich den anderen Quelltext in meinen Quelltext so ein,dass es keine Probleme gibt?Habe schon etwas von Strings gehört,nur checke ich bis jetzt irgendwie nicht wie ich den Quelltext da so einbauen kann,dass alles passt.
Bin für alle Methoden offen.Und danke euch schon mal für die Antworten.

IntErEs

DeddyH 4. Feb 2010 13:00

Re: Quelltext in Quelltext setzten
 
Hallo und Willkommen in der DP :dp:,

könntest Du die Frage noch einmal neu formulieren? Ich weiß nicht, ob es nur mir so geht, aber ich habe nur Bahnhof verstanden :gruebel:

Teekeks 4. Feb 2010 13:01

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von DeddyH
Hallo und Willkommen in der DP :dp:,

könntest Du die Frage noch einmal neu formulieren? Ich weiß nicht, ob es nur mir so geht, aber ich habe nur Bahnhof verstanden :gruebel:

Dito

IntErES 4. Feb 2010 13:09

Re: Quelltext in Quelltext setzten
 
Danke,hehe,ok ich versuche es zu veranschaulichen.

Ich möchte gerne einen unabhängigen Quelltext(B) in den Quelltext(A) meines Programms einbauen.Der Quelltext(B) sollte im Programm verfügbar sein,sodass ich einzelne Zeilen des Quelltexts(B) auslesen kann.Das Problem ist,dass ich noch nicht weiß wie genau ich das realisieren soll,dass Quelltext(B) in Quelltext(A) rein soll,also das es ungefähr so aussieht:

"Unit1 //Quelltext(A)

'Unit ...... //Quelltext(B)
.....
....
end.'

procedure xy(.....);
....
...
end."


Eine Idee?

Teekeks 4. Feb 2010 13:12

Re: Quelltext in Quelltext setzten
 
Delphi-Quellcode:
unit 1;
uses 2; //hier der name der 2. Unit anstatt der 2
procedure e;
{bla bla bupp}

fatalerror 4. Feb 2010 13:14

Re: Quelltext in Quelltext setzten
 
Was willst du mit dem eingebundenen Quelltext tun?

- soll der auch ausgeführt werden?
- oder soll er nur als Text angezeigt werden?

wenn die zweite Annahme richtig ist, dann kann der Text zb in einem Memo angezeigt werden, oder in eine Stringliste geladen werden,

IntErES 4. Feb 2010 13:17

Re: Quelltext in Quelltext setzten
 
@Teekeks danke,aber das ist dann doch nicht ganz,das was ich wollte sorry ich erkläre es nochmal.
Ich will keine .pas,oder .txt einbinden.Ich will gleich beim dem programmieren des Quelltexts(A),den Quelltext(B) mit integrieren,sodass er im Quelltext(A) steht.Ist es jetzt deutlicher?Ich kann es schwer beschreiben^^.

@fatalerror
Du hast es super ausgedrückt was ich wollte^^,danke,das zweite trifft zu er soll als Text dienen,aber nicht in einem Memo sondern eher in einem String im Quelltext(A).Also sozusagen unsichtbar.Wie soll ich das machen mit der Stringlist?

DeddyH 4. Feb 2010 13:20

Re: Quelltext in Quelltext setzten
 
Definier Dir den String doch als Konstante oder Resourcestring.
Delphi-Quellcode:
const MeinTollerString = 'Wuppdi';

p80286 4. Feb 2010 13:22

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von fatalerror
...wenn die zweite Annahme richtig ist, dann kann der Text zb in einem Memo angezeigt werden, oder in eine Stringliste geladen werden,

oder noch einfacher:

Delphi-Quellcode:
const
  c_Quelltext='unit1'+
              'uses sysobjects.....'+
              ............
              'end.';
ich werde aber das Gefühl nicht los, das es um soetwas wie einen Interpreter oder selbstmodifizierende Programme geht.

Gruß
K-H

fatalerror 4. Feb 2010 13:23

Re: Quelltext in Quelltext setzten
 
Einem Anfänger würde ich trotzdem das Memo empfehlen.:

1. Leg ein Memofeld auf deine Form
2. Füge im Objektinspektor bei den Eigenschaften von Memo unter Lines deinen Quelltext ein
3. Setzte die Eigenschaft visible auf false deines Memos


nun kannst du auf den Inhalt deines Memos zugreifen!

BrightAngel 4. Feb 2010 13:23

Re: Quelltext in Quelltext setzten
 
Hallo und willkommen in der DP!
Ich vermute mal du kommst aus der HTML oder script ecke? :-D
Die Sache ist die: Jede Unit besteht aus mehreren Teilen.
Grob gesehen aus dem Interface-Teil in der die Funktionen "vorgestellt" werden und dem Implementation-Teil der dann die Tatsächliche Funktion beschreibt.

Wenn du zwei Units hast und in beiden dinge drin sind die du brauchst, so kannst du sie zusammenführen indem du die beiden Teile jeweils zusammenführst.

Bei Scripts ist es noch so, dass du während des Ausführens auf den Code zugreifen kannst.
Bei Delphi, wird der Quelltext in Maschinencode umgewandelt, welcher nicht mehr direkt auslesbar ist.

Wenn du uns allerdings verrätst was du denn damit vorhast, können wir dir vlt. besser weiterhelfen???
:thumb:

Brighty

IntErES 4. Feb 2010 13:24

Re: Quelltext in Quelltext setzten
 
Kann ich es nicht irgendwie als globale Variable deklarieren?Ich versteh nicht wie ich den ganzen Code eintragen soll
zum Beispiel:

Quelltext(B)

mystring:='Quelltext(B)....
...
...
end.'

Aber so geht es doch nicht oder,weil:
1)Delphi nimmt doch nur eine Zeile wahr,oder?
2)Die ganzen Symbole(;,. usw.)entkraften doch das " ' ",oder?

Naja ich bin auf jedenfall total verwirrt^^,könntet ihr mir vielleicht ungefähr zeigen wie ich das realisieren soll?

DeddyH 4. Feb 2010 13:26

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von BrightAngel
Wenn du uns allerdings verrätst was du denn damit vorhast, können wir dir vlt. besser weiterhelfen???


IntErES 4. Feb 2010 13:31

Re: Quelltext in Quelltext setzten
 
Da waren wohl einige schneller als mein letzter Post^^.

@p80286 Ich glaube du hast meine Lösung gebracht,wieso bin ich selbst nicht auf so was gekommen :glaskugel:
Aber wieso machst du es als Konstante?Kann ich es nicht eifach als globale Variable deklarieren?Ich meine bei dieser Art der globalen Variable könnte man es doch ruhig machen,es würde keine Probleme geben,oder?

Mein Vorhaben:Ich will Quelltext(B) nur nach Zeilen auslesen,bei meinem eigentlichen Programm.Also Buttonklick=Quelltext(B)+pos usw.

BrightAngel 4. Feb 2010 13:33

Re: Quelltext in Quelltext setzten
 
Delphi bricht das Interpretieren am Zeilenende nicht ab.
Der Strichpunkt dient als Seperator.

Es funktioniert so:

Delphi-Quellcode:
var
  global:string;

function MeineFunktion:Boolean;
var
  privat:string;
begin
  privat:='Ich bin von Außen nicht zugänglich!'+#13+
          'Im Quellcode kann man mich auch zweizeilig schreiben!';
 
  global:='Es sind auch Sonderzeichen möglich! Beweis:
function test:integer;
begin

end;';

Result:=True;
end;

p80286 4. Feb 2010 13:42

Re: Quelltext in Quelltext setzten
 
ich hab die Konstante gewählt, weil ich damit konstante Werte einem Programm übergebe.
Eine Variable dagegen ist für veränderbare Werte vorgesehen.
Da würde sich ein TMemo wohl eher anbieten (vgl #10 von FatalError) oder ein Tstringlist oder ....

Aber so richtig verstanden was Du willst hab ich immer noch nicht.

Gruß
K-H

IntErES 4. Feb 2010 13:43

Re: Quelltext in Quelltext setzten
 
@BrightAngel Danke dir ich glaube ich hab es verstanden.Dann wäre das hier jetzt doch richtig oder?

var
meinstring: 'unit Unit1;'+

'interface'+

'uses'+
'Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,'+
'Dialogs;'+

'type'+
'TForm1 = class(TForm)'
'private'+
'{ Private-Deklarationen }'+
'public'+
.....

Oder?Und wenn ich fertig bin dann einfach das " ; ",stimmts?

@p80286 Achso,ok ich danke dir auch du hast mir sehr geholfen,DP ist wirklich sehr gutes Forum,schnelle Antworten,gut verständliche Hilfe,ich danke euch allen.

DeddyH 4. Feb 2010 13:45

Re: Quelltext in Quelltext setzten
 
Du solltest aber auch noch die Zeilenumbrüche einfügen (dafür gibt es die Konstante sLineBreak), sonst steht in Deiner Konstanten/Variablen alles direkt hintereinander.

fatalerror 4. Feb 2010 13:45

Re: Quelltext in Quelltext setzten
 
Sorry, aber das ist widerspricht doch jeglichem effizientem Denken, was ihr da vorschlägt!

Wenn ich das in max 2 Minuten mit einem Memo gelöst habe (mit CTRL + C -> Ctrl + V) weshalb soll ich den den Ursprungsquelltext irgendwie als String oder Konstante innerhalb des Quellcodes zusammenpfriemeln mit komplizierten Stringverkettungen.

im objektinsoektor:

memo1.visible:= false;
memo1.wordwrap:= false;
memo1.lines öffnen + ctlr + v (Text wird eingefügt)

dann um den Colde anzuzeigen sowas wie:
Delphi-Quellcode:
var
  i: Integer;
begin
  for i:= 0 to memo1.lines.count - 1 do
    showmessage(memo1.lines[i]);
end;

IntErES 4. Feb 2010 13:53

Re: Quelltext in Quelltext setzten
 
@DeddyH Das würde dann so aussehen:

'unit Unit1'sLinebreak+
....


oder:

'unit Unit1 sLinebreak'+
....

???

@fatalerror
Ich möchte als einziger in der Lage sein den Quelltext(B) auszulesen,sprich um zu sehen wo genau die "benötigten" Zeilen sind.
Mit einem Memo wird mir doch alles angezeigt.

DeddyH 4. Feb 2010 13:55

Re: Quelltext in Quelltext setzten
 
Delphi-Quellcode:
const MeinString = 'uses' + sLineBreak+
'Windows, SysUtils, WuppdiUnit;' + sLineBreak + 
'weitere Zeilen';
Aber wahrscheinlich ist es für den Anfang wirklich das Einfachste, es mit dem unsichtbaren Memo zu versuchen wie von fatalerror vorgeschlagen.

fatalerror 4. Feb 2010 13:55

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von IntErES
@DeddyH Das würde dann so aussehen:


@fatalerror
Ich möchte als einziger in der Lage sein den Quelltext(B) auszulesen,sprich um zu sehen wo genau die "benötigten" Zeilen sind.
Mit einem Memo wird mir doch alles angezeigt.

memo1.visible:= false!

und nichts wird angezeigt.

IntErES 4. Feb 2010 13:58

Re: Quelltext in Quelltext setzten
 
@DeddyH Perfekt riesiges Dankeschön auch an dich^^

@fatalerror Ja,das ist mir schon klar^^,aber ich meine ich müsste das Memo Feld doch auch selbst irgendwie auf visible:=true setzten können und wenn ich das kann,können die anderen die mein Programm haben,das auch.Durch eine Konstante im Quelltext(A) kann nur ich die benötigten Informationen ins Formular bekommen und keiner sonst.

Ich habe noch eine kleine Frage.Wie ist es dann beim compilen von Quelltext(A),wenn ich so einen Code habe.

'if edit2.Text:=1+1 then' +slinebreak+
'Showmessage('Sie haben Addition angefordert')' +slinebreak+ <----- Tut sich das ' '' ' nicht irgendwie beißen?

fatalerror 4. Feb 2010 14:02

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von IntErES
@fatalerror Ja,das ist mir schon klar^^,aber ich meine ich müsste das Memo Feld doch auch selbst irgendwie auf visible:=true setzten können und wenn ich das kann,können die anderen die mein Programm haben,das auch.Durch eine Konstante im Quelltext(A) kann nur ich die benötigten Informationen ins Formular bekommen und keiner sonst.

Nein! probier doch mal das aus, was ich dir gezeigt habe!
Um auf den Inhalt zuzugreifen brauchst du das memo nicht sichtbar zu machen.

Medium 4. Feb 2010 14:04

Re: Quelltext in Quelltext setzten
 
String wie du sie jetzt benutzt stehen auch als Klartext in der .exe Datei. Mit jedem beliebigen Hex-Viewer kann ich in aller Ruhe alles durchlesen. Das ließe sich dann aber egal was du nachher nimmst, nur über eine Verschlüsslung verhindern - und auch da gibts Welten zwischen den möglichen Methoden, auch was den Aufwand es zu implementieren angeht. Wenn dein Ziel Geheimhaltung ist, stehst du von vorn herein auf relativ verlorenem Posten da, vor allem als wenig erfahrener Programmierer.

Edit: Ich sag mal so: Man kann das Memo von einem externen Programm heraus sichtbar machen, dazu muss man nur an das Handle des Memos kommen. Ist bei unsichtbaren Controls nicht mehr sooo einfach, aber wenn ich weiss was ich suche, kann ich nach einer Auflistung aller Childs des Hauptformulars einfach mal alle Controls auf gut Glück sichtbar machen. Das ist vermutlihc nicht, was der TE meinte, aber es ginge so durchaus.

Edit2: Allerdings wäre das Nonsense, wenn man mal vergleicht, dass für in einem Memo hinterlegten Text schon ein popeliger Ressourcen-Viewer reicht um alles zu lesen ;)

IntErES 4. Feb 2010 14:08

Re: Quelltext in Quelltext setzten
 
@Medium Klar kann man den auslesen,man kann auch das ganze Programm auslesen wenn man genug Assembler kann oder einen Decompiler hat.Aber das ist nicht der Sinn der Frage,ich wollte nur wissen,wie genau ich da vorgehen muss,und ich muss sagen ihr versteht euer Geschäft^^.Das mit der Verschlüsselung der Strings werde ich dann vielleicht noch mit md5 verschlüsseln,ist aber in meinem Programm nicht notwendig da nicht jeder Anwender gerade einen Hex-Editor besitzt bzw. weiß was das ist.

DeddyH 4. Feb 2010 14:10

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von IntErES
Ich habe noch eine kleine Frage.Wie ist es dann beim compilen von Quelltext(A),wenn ich so einen Code habe.

'if edit2.Text:=1+1 then' +slinebreak+
'Showmessage('Sie haben Addition angefordert')' +slinebreak+ <----- Tut sich das ' '' ' nicht irgendwie beißen?

Du musst die Hochkommata verdoppeln:
Delphi-Quellcode:
const MeinString = 'ShowMessage(''Sie haben Addition angefordert.'');';

IntErES 4. Feb 2010 14:12

Re: Quelltext in Quelltext setzten
 
@DeddyH Nochmals danke^^.Hat alles geklappt. :dp:

fatalerror 4. Feb 2010 14:13

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von IntErES
...mit md5 verschlüsseln,ist aber in meinem Programm nicht notwendig da nicht jeder Anwender gerade einen Hex-Editor besitzt bzw. weiß was das ist.

OT: md5 ist ein Hash und keine Verschlüsselung!

IntErES 4. Feb 2010 14:19

Re: Quelltext in Quelltext setzten
 
@fatalerror Ja md5 ist keine Verschlüsselung wie RSA,oder die ähnlichen,aber man kann mit einem md5 doch auch einen String verschlüsseln,oder irre ich mich da?
Ich mein:

Hallo ich bins --> ungefähr:6de5a3b263b937a1a0ec390834ab5485

Und sowas kann doch nicht jeder entschlüsseln oder?Also wäre der Hash,in meine Programm sowas wie eine Verschlüsselung!?

fatalerror 4. Feb 2010 14:22

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von IntErES
@fatalerror Ja md5 ist keine Verschlüsselung wie RSA,oder die ähnlichen,aber man kann mit einem md5 doch auch einen String verschlüsseln,oder irre ich mich da?
Ich mein:

Hallo ich bins --> ungefähr:6de5a3b263b937a1a0ec390834ab5485

Und sowas kann doch nicht jeder entschlüsseln oder?Also wäre der Hash,in meine Programm sowas wie eine Verschlüsselung!?

ja du irrst!

Medium 4. Feb 2010 14:23

Re: Quelltext in Quelltext setzten
 
Nein, ein Hash ist (quasi-) unidirektional, bzw. injektiv - und das ganz bewusst. Du kommst von einem Hash nicht mehr mit einem einfachen mathematischen Verfahren zurück zur Message. Das ist der ganze Sinn und Zweck von Hashes, und sie sind ganz gut darin ;).

IntErES 4. Feb 2010 14:30

Re: Quelltext in Quelltext setzten
 
@fatalerror "Ja du irrst" Man kann nicht immer Recht haben^^

@Medium :wiejetzt: Aber wenn ich den richtigen Schlüssel habe kann ich den richtigen String doch bekommen, :gruebel: nicht?

fatalerror 4. Feb 2010 14:32

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von IntErES
@Medium :wiejetzt: Aber wenn ich den richtigen Schlüssel habe kann ich den richtigen String doch bekommen, :gruebel: nicht?

Nein! MD5 ist keine Verschlüsselung wie Medium so schön erklärt hat. So hiermit klinke ich mich hier aus.

implementation 4. Feb 2010 15:10

Re: Quelltext in Quelltext setzten
 
Zitat:

Zitat von IntErES
aber in meinem Programm nicht notwendig da nicht jeder Anwender gerade einen Hex-Editor besitzt bzw. weiß was das ist.

Man braucht dafür nicht mal 'nen Hex-Editor. Notepad reicht vollkommen aus ;D
Soll jetzt natürlich keine Anregung sein, das ganze noch so zu verhashen, dass du nix mehr rauskiegst.

IntErES 4. Feb 2010 15:28

Re: Quelltext in Quelltext setzten
 
@implementation
Ich hatte niemals vor etwas zu verhashen,die Sache war die,dass man über das auslesen des Codes,die "Heimlichtuerei" sich auch sparen hätte können.Ich habe dann fälschlicherweise gedacht,das ich meinen String in einen Hash verwandeln könnte und somit das auslesen mit einem Hex-Editor verhindern lassen könnte.
Aber eins verstehe ich nicht,wie willst du mit Notepad,Daten aus der Exe lesen?

DeddyH 4. Feb 2010 15:30

Re: Quelltext in Quelltext setzten
 
Du kannst eine Exe auch mit Notepad öffnen.

IntErES 4. Feb 2010 15:34

Re: Quelltext in Quelltext setzten
 
Ja aber was will man dann da auslesen?Kommt doch nur:dkji+irgendwelche komische Zeichen!?

DeddyH 4. Feb 2010 15:39

Re: Quelltext in Quelltext setzten
 
Dann such doch mal nach Teilen Deiner Konstanten.

letsfetz 4. Feb 2010 15:56

Re: Quelltext in Quelltext setzten
 
Ich verstehe nur Bahnhof und kannst du uns mal genau erklären was dein Programm macht...
Zitat:

Zitat von IntErES
...dass man über das auslesen des Codes,die "Heimlichtuerei" sich auch sparen hätte können...

Wozu in einem Programm einen verschlüsselten Quelltext abspeichern der nicht ausgeführt werden kann ?
Und auch nur du den Quelltext lesen oder bearbeiten kannst ?

Speicher den Quelltext doch einfach auf nem USB Stick (unverlierbar anbringen), dort wäre er auch schon ganz gut geschützt.

Ich versteh einfach den Mechanismus nicht wozu das gut sein soll. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz