| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| ALWIM 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1048
 Wohnort: Niederbayern
 
 | 
			
				|  Verfasst am: 18.05.2021, 14:58    Titel: Kompilierung trotz fehlender Bibliothek/Quellcodes |   |  
				| 
 |  
				| Gibt es eine Möglichkeit, ein Programm zu kompilieren, trotz fehlender .bi/.bas Datei? Normalerweise kommt immer eine Fehlermeldung, wenn ich versuche ein Programm zu kompilieren und eine Datei fehlt. Ich stelle mir das so vor, dass in dem Quellcode eine .bi oder .bas Datei nur dann eingebunden bzw. ausgeführt wird, wenn die Datei vorhanden ist! Gibt es da einen Befehl, der das überspringt? Ich möchte ein Programm schreiben, aber einen Teil vom Quellcode nicht mitliefern oder mitgeben. Ich könnte zwar die entsprechende Stelle im Quellcode als Kommentar versehen, aber das will ich wenn möglich vermeiden. Vor allem, da es zu aufwendig ist, jedes mal 100 Zeilen zu ändern. 	  | Code: |  	  | #INCLUDE "TEST.BAS" | 
 _________________
 SHELL SHUTDOWN -s -t 05
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| nemored 
 
  
 Anmeldungsdatum: 22.02.2007
 Beiträge: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 18.05.2021, 17:02    Titel: |   |  
				| 
 |  
				| Vielleicht so etwas in der Art; 
  	  | Code: |  	  | #DEFINE INCLUDEHIDDENFILES #IF DEFINED INCLUDEHIDDENFILES
 #INCLUDE "only4themaster.bi"
 #ENDIF
 | 
 und dann mittels #DEFINE alle Stellen so umformen, dass sie für den Fall, dass INCLUDEHIDDENFILES nicht definiert ist, auf irgendeinde Fallback-Option zurückfallen.
 
 Allerdings erschließt sich mir der Sinn nicht ganz - wenn man auch ohne die geheimen Codeabschnitte ein compilierbares und funktionsfähiges Programm erhält, braucht es diese geheimen Codebschnitee offenbar gar nicht?
 _________________
 Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| ALWIM 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1048
 Wohnort: Niederbayern
 
 | 
			
				|  Verfasst am: 18.05.2021, 17:19    Titel: |   |  
				| 
 |  
				|  	  | nemored hat Folgendes geschrieben: |  	  | Vielleicht so etwas in der Art; 
  	  | Code: |  	  | #DEFINE INCLUDEHIDDENFILES #IF DEFINED INCLUDEHIDDENFILES
 #INCLUDE "only4themaster.bi"
 #ENDIF
 | 
 und dann mittels #DEFINE alle Stellen so umformen, dass sie für den Fall, dass INCLUDEHIDDENFILES nicht definiert ist, auf irgendeinde Fallback-Option zurückfallen.
 
 Allerdings erschließt sich mir der Sinn nicht ganz - wenn man auch ohne die geheimen Codeabschnitte ein compilierbares und funktionsfähiges Programm erhält, braucht es diese geheimen Codebschnitee offenbar gar nicht?
 | 
 Vielen herzlichen Dank für die Antwort! Maul schauen, ob das funktioniert?
 Der Sinn des Ganzen ist ganz einfach: In der exe-Datei fehlt ein Teil der Funktionen, da diese beim Kompilieren nicht gelesen bzw. eingebunden wurden. Jene Funktion sollte nur bei mir vorhanden sein, da ich den fehlenden Quellcode besitze. Jemand der den fehlenden Quellcode nicht besitzt, sollte das Programm auch ohne dem fehlenden Quellcode kompilieren können. Es ist quasi eine Funktion, die nicht für jeden freigegeben ist.
 
 Edit:
 Funktioniert leider nicht! Der Compuiler meldet mir immer, dass die Datei fehlt...
 _________________
 SHELL SHUTDOWN -s -t 05
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 18.05.2021, 17:54    Titel: |   |  
				| 
 |  
				| Du musst auch alle abschnitte, welche auf diese .bi zugreifen, mit einem 
  	  | Code: |  	  | #if defined INCLUDEHIDDENFILES aufruf von funktionen aus der .bi
 'ENDIF
 
 | 
 
 einkapseln.
 
 
 beispiel:
 
 .test.bi
 
  	  | Code: |  	  | sub def() Print "def"
 end sub
 | 
 
 test.bas
 
  	  | Code: |  	  | #define HIDDENBI 'Auskommentieren, wenn test.bi nicht vorhanden ist. #if defined HIDDENBI
 #include once "test.bi"
 #END IF
 
 sub abc()
 print "abc"
 end sub
 
 abc()
 #if defined HIDDENBI
 def()
 #end if
 
 | 
 
 MfG
 TPM
 _________________
 [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| ALWIM 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1048
 Wohnort: Niederbayern
 
 | 
			
				|  Verfasst am: 18.05.2021, 18:24    Titel: |   |  
				| 
 |  
				| Genau das will ich vermeiden! Es sollte kompiliert werden können ohne dass ich etwas als Kommentar versehe. Aber mein Plan funktioniert eh nicht. Habe gerade gesehen, dass man Texte in der exe-Datei, durch öffnen der exe-Datei mit einem Texteditor lesen kann. Anscheinend werden die in der Datei als Klartext gespeichert? Wahrscheinlich bleibt mir nichts anderes übrig, dass ich ein 2. separates Programm schreibe. Ich könnte mit FreeBasic nicht einmal ein Programm schreiben, wo man einen Lizenzschlüssel braucht, weil dieser in der exe-Datei in Klarschrift lesbar ist. 	  | Zitat: |  	  | #define HIDDENBI 'Auskommentieren, wenn test.bi nicht vorhanden ist. | 
 _________________
 SHELL SHUTDOWN -s -t 05
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 18.05.2021, 18:44    Titel: |   |  
				| 
 |  
				| du musst doch den kommentar nicht hinzufügen .. der war nur für dich, damit du weist, was du auskommentieren / löschen musst, damit das, was du vor hast, funktioniert. 
 Und, dieses verfahren ist expliziet genau das, was du suchst. Es verhindert, das der compiler diese elemente rein kompiliert. Du kannst (wenn du willst) auch die Kommentare in die #if defined rein packen. Dann werden sie beim kompilieren ebenfalls ignoriert.
 
 
 MfG
 TPM
 _________________
 [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| ALWIM 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1048
 Wohnort: Niederbayern
 
 | 
			
				|  Verfasst am: 18.05.2021, 19:12    Titel: |   |  
				| 
 |  
				| Funktioniert leider nicht. Zuerst bekomme ich ein paar Fehlermeldungen. Diese sind weg, wenn ich die fehlenden Klammern reinschreibe. 	  | ThePuppetMaster hat Folgendes geschrieben: |  	  | du musst doch den kommentar nicht hinzufügen .. der war nur für dich, damit du weist, was du auskommentieren / löschen musst, damit das, was du vor hast, funktioniert. 
 Und, dieses verfahren ist expliziet genau das, was du suchst. Es verhindert, das der compiler diese elemente rein kompiliert. Du kannst (wenn du willst) auch die Kommentare in die #if defined rein packen. Dann werden sie beim kompilieren ebenfalls ignoriert.
 
 
 MfG
 TPM
 | 
 
 
  	  | Code: |  	  | #if defined (HIDDENBI) | 
 
 Allerdings meldet mir der Kompiler jedes mal, dass die Test.bi fehlt!
 
 Ich habe folgenden Quellcode:
 
 
 Wie muss der Quellcode jetzt aussehen, dass das ganze bei mir ohne Test.bi funktioniert? Welchen Compiler verwendet ihr? Ich habe Version 1.07.1 	  | Code: |  	  | SCREENRES 640, 320, 32 
 #DEFINE HIDDENBI 'Auskommentieren, wenn test.bi nicht vorhanden ist.
 #if defined (HIDDENBI)
 #include once "test1.bi"
 #ENDIF
 
 DECLARE SUB ABC()
 
 ABC()
 #if defined (HIDDENBI)
 def()
 #ENDIF
 
 SLEEP
 END
 
 
 SUB ABC()
 PRINT "abc"
 END SUB
 | 
 _________________
 SHELL SHUTDOWN -s -t 05
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| hhr 
 
 
 Anmeldungsdatum: 15.07.2020
 Beiträge: 116
 
 
 | 
			
				|  Verfasst am: 18.05.2021, 19:21    Titel: |   |  
				| 
 |  
				| Kann man nicht zusätzlich FileExists gebrauchen? |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| nemored 
 
  
 Anmeldungsdatum: 22.02.2007
 Beiträge: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 18.05.2021, 20:15    Titel: |   |  
				| 
 |  
				| FILEEXISTS funktioniert während der Laufzeit, nicht während des Compiliervorgangs. 
 @ALWIM: Natürlich muss Test.bi - oder in deinem Fall test1.bi - existieren, damit das laufen kann. Wenn die Datei nicht existiert, musst du die Zeile mit dem #DEFINE HIDDENBI auskommentieren, damit es trotzdem läuft. Das ist ja der Sinn des Ganzen.
 _________________
 Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| nemored 
 
  
 Anmeldungsdatum: 22.02.2007
 Beiträge: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 18.05.2021, 20:23    Titel: |   |  
				| 
 |  
				| Nachtrag - die vielleicht deutlich einfachere Lösung: 
 Du erstellst eine test1.bi mit den Funktionen, die nur du nutzen willst und die nicht weitergegeben werden sollen, und eine test2.bi mit Dummy-Funktionen zum Weitergeben. D. h. wenn test1.bi eine Funktion namens strengGeheimeAuswertungsmethode() enthält, bekommt die test2.bi ebenfalls diese Funktion, aber ohne funktionalen Inhalt - sie gibt dann halt z. B. immer den Wert 0 zurück. Dann kannst du im Quelltext, den du weitergeben willst, einfach ein #INCLUDE "test2.bi" einfügen, und wenn du für dich selbst kompilieren willst, änderst du die Zeile in #INCLUDE "test1.bi" ab.
 _________________
 Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| ALWIM 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1048
 Wohnort: Niederbayern
 
 | 
			
				|  Verfasst am: 18.05.2021, 21:05    Titel: |   |  
				| 
 |  
				| Danke für die Antwort. Das ist ja genau das, was ich vermeiden wollte, dass ich das jedes Mal als Kommentar versehen muss oder eben auch nicht! Der Trick mit "FILEEXISTS" bei #DEFINE funktioniert auch nicht. Dann muss ich das wirklich jedes Mal als Kommentar versehen. 	  | nemored hat Folgendes geschrieben: |  	  | FILEEXISTS funktioniert während der Laufzeit, nicht während des Compiliervorgangs. 
 @ALWIM: Natürlich muss Test.bi - oder in deinem Fall test1.bi - existieren, damit das laufen kann. Wenn die Datei nicht existiert, musst du die Zeile mit dem #DEFINE HIDDENBI auskommentieren, damit es trotzdem läuft. Das ist ja der Sinn des Ganzen.
 | 
 Beschissen irgendwie...
 _________________
 SHELL SHUTDOWN -s -t 05
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| hhr 
 
 
 Anmeldungsdatum: 15.07.2020
 Beiträge: 116
 
 
 | 
			
				|  Verfasst am: 18.05.2021, 21:08    Titel: |   |  
				| 
 |  
				| Man kann aber auch eine leere Datei mitliefern. 
  	  | Code: |  	  | #include "Leere Datei.bi" Print "Testversion"
 Sleep
 | 
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| nemored 
 
  
 Anmeldungsdatum: 22.02.2007
 Beiträge: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 18.05.2021, 21:21    Titel: |   |  
				| 
 |  
				|  	  | ALWIM hat Folgendes geschrieben: |  	  | Danke für die Antwort. Das ist ja genau das, was ich vermeiden wollte, dass ich das jedes Mal als Kommentar versehen muss oder eben auch nicht! Der Trick mit "FILEEXISTS" bei #DEFINE funktioniert auch nicht. Dann muss ich das wirklich jedes Mal als Kommentar versehen. 	  | nemored hat Folgendes geschrieben: |  	  | FILEEXISTS funktioniert während der Laufzeit, nicht während des Compiliervorgangs. 
 @ALWIM: Natürlich muss Test.bi - oder in deinem Fall test1.bi - existieren, damit das laufen kann. Wenn die Datei nicht existiert, musst du die Zeile mit dem #DEFINE HIDDENBI auskommentieren, damit es trotzdem läuft. Das ist ja der Sinn des Ganzen.
 | 
 Beschissen irgendwie...
 | 
 Wenn du dir den Kommentar sparen willst, kannst du den Präprozessor auch explizit mit der Compiler-Option -d setzen (https://www.freebasic-portal.de/befehlsreferenz/der-compiler-458.html, Abschnitt "Bedingtes Compilieren und Präprozessor"). Ob das letztendlich bequemer ist, lasse ich dahin gestellt.
 Oder du schreibst dir ein Programm, das prüft, ob eine bestimmte Datei existiert, und dann abhängig davon eine andere Datei mit speziellen Einstellungen kompiliert oder nicht.
 
 Zur anderen Frage, die ich vorher übersehen habe: Daten, die du deinem Programm einprogrammierst, müssen auch so abgelegt werden - Strings im Quellcode werden auch wieder auffindbar sein. Aber wenn es z. B. um einen Lizenzschlüssel geht - warum liest du den nicht mittels OPEN aus einer externen Datei, die du dann bei dir behältst?
 _________________
 Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 18.05.2021, 21:30    Titel: |   |  
				| 
 |  
				| Noch eine alternative: 
 Du schreibst eine .dll / .so welche du dynamisch zur laufzeit einbinden kannst. Dadurch kannst du vorab prüfen, ob diese dll existiert. Wenn nicht, dann lädst du sie halt nicht, und die Funktionen stehen nicht zur Verfügung. Wenn Si existiert, dann entsprechend wird sie geladen und eingebunden.
 
 Dann brauchst du keien anpassungen im source vornehmen, weil es überall gleich bleiben kann.
 
 
 MfG
 TPM
 _________________
 [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| hhr 
 
 
 Anmeldungsdatum: 15.07.2020
 Beiträge: 116
 
 
 | 
			
				|  Verfasst am: 18.05.2021, 22:01    Titel: |   |  
				| 
 |  
				| Vielleicht könnte man in jedem Fall eine bi-Datei einbinden. Eine bi-Datei könnte unter anderem die Zeile #DEFINE HIDDENBI enthalten, die andere nicht.
 So könnte man dem Programm verschiedene Funktionen verleihen.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 19.05.2021, 08:57    Titel: |   |  
				| 
 |  
				| Das wäre auf jeden Fall die sauberste Lösung (und wohl auch die einzige, die funktioniert). 	  | ThePuppetMaster hat Folgendes geschrieben: |  	  | Du schreibst eine .dll / .so welche du dynamisch zur laufzeit einbinden kannst... | 
 
 Gruß
 grindstone
 
 EDIT
 Hier mal ein ganz einfaches Beispiel:
 
 Die DLL (unter dem Namen "unglaublichGeheimeMathematischeOperation.bas" im selben Verzeichnis wie das Hauptprogramm abspeichern und mit Option "-dll" compilieren):
  	  | Code: |  	  | 'Die Prozedur (Function oder Sub) MUSS deklariert werden. Der Name vor dem Alias ist der Name der Prozedur ' innerhalb der .dll, mit dem Namen hinter dem Alias wird die Prozedur vom aufrufenden Programm aus
 ' angesprochen. Die Namen können, müssen aber nicht unterschiedlich sein.
 
 Declare Function wurzel Alias "wurzel" (x As Double) As Double
 
 Function wurzel(x As Double) As Double Export
 Return Sqr(x)
 End Function
 | 
 und hier das Hauptprogramm:
  	  | Code: |  	  | Dim As Any Ptr geheimeDll Dim As Double x
 
 Dim wurzelaus As Function(wert As Double) As Double 'abbild der prozedur aus der .dll mit DIM statt DECLARE
 
 geheimeDll = DylibLoad("unglaublichGeheimeMathematischeOperation") 'pointer auf die .dll
 
 wurzelaus = DylibSymbol(geheimeDll, "wurzel") 'pointer auf die prozedur innerhalb der .dll
 
 ? geheimeDLL
 ? wurzelaus
 ?
 
 x = 144
 
 If geheimeDLL Then
 '.dll ist vorhanden
 Print "Wurzel aus"; x; " ist"; wurzelaus(x)
 Else
 'dll ist nicht vorhanden
 Print "Woher soll ich das denn wissen?"
 EndIf
 
 Sleep
 | 
 _________________
 For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| ALWIM 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1048
 Wohnort: Niederbayern
 
 | 
			
				|  Verfasst am: 19.05.2021, 16:08    Titel: |   |  
				| 
 |  
				| Diese Lösung, gefällt mir am allerbesten! Und funktioiert auch noch. Keine Ahnung, wieso ich da nicht selber drauf gekommen bin? Mal schauen, wie ich der Parameter übergeben kann? 	  | hhr hat Folgendes geschrieben: |  	  | Man kann aber auch eine leere Datei mitliefern. 
  	  | Code: |  	  | #include "Leere Datei.bi" Print "Testversion"
 Sleep
 | 
 | 
 
 
 Wenn mir jemand erklärt, wie ich in der EXE-Datei den Schlüssel verstecken kann? Das Dumme ist, dass ich die EXE-Datei bloß mit einem Texteditor öffnen muss, um an den Schlüssel zu kommen!!! Egal was ich im Programm an Texte drin habe, ich kann jedes Mal den Text ganz einfach auslesen. Der ist immer sichtbar... 	  | Zitat: |  	  | Aber wenn es z. B. um einen Lizenzschlüssel geht - warum liest du den nicht mittels OPEN aus einer externen Datei, die du dann bei dir behältst? 
 | 
 _________________
 SHELL SHUTDOWN -s -t 05
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| dreael Administrator
 
  
 Anmeldungsdatum: 10.09.2004
 Beiträge: 2530
 Wohnort: Hofen SH (Schweiz)
 
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		|  |