Compilerdirektive DLL oder EXE
Compilerdirektive DLL oder EXE
hallo,
gibt es irgendeine möglichkeit zur kompilierungszeit festzustellen, ob gerade eine dll oder exe erstellt wird?
josh
gibt es irgendeine möglichkeit zur kompilierungszeit festzustellen, ob gerade eine dll oder exe erstellt wird?
josh
Re: Compilerdirektive DLL oder EXE
Vielleicht gibt es irgendwelche Spezialtricks die mir nicht bekannt sind, aber mit normalen Mitteln geht es nicht automatisch. Soll heißen, es gibt dafür leider keine Compilerdirektive und auch keine reservierte Konstante wie z.B. #PB_Compiler_Exe, die #True ist wenn eine EXE erzeugt wird, und #False wenn eine DLL erzeugt wird.Josh hat geschrieben:gibt es irgendeine möglichkeit zur kompilierungszeit festzustellen, ob gerade eine dll oder exe erstellt wird?
Für eine bedingte Compilierung je nachdem ob eine EXE oder DLL erzeugt wird, muss man selbst solch eine Konstante anlegen und dafür sorgen, dass sie jeweils den richtigen Wert hat.
Grüße, Nino
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Re: Compilerdirektive DLL oder EXE
Warum sollte man das in Compilerdirektive einbauen,
wenn man es manuell unter den Compileroptionen\-execuable-Format: einstellt, ob
eine Windows, Console oder Shared DLL compiliert werden sollte?
Gruß,
Falko
wenn man es manuell unter den Compileroptionen\-execuable-Format: einstellt, ob
eine Windows, Console oder Shared DLL compiliert werden sollte?
Gruß,
Falko
Re: Compilerdirektive DLL oder EXE
Es geht vermutlich darum, dass das am ende erstellte Ziel (Exe oder DLL) selber weiß, was es ist (im übertragenen Sinne).
Was du machen kannst, ist bei einem PB-Projekt, selber für das Ziel eine Konstante festlegen.
Compiler -> Compiler-Optionen -> Konstanten -> Eigene Konstanten
Und jenachdem welches Ziel erstellt wird, kannst du dann dort zB:
#PB_Compiler_DLL = 1
eingeben und im anderen Fall dann 0.
Sowas verwende ich auch, um zB beim Erstellen von mehreren Zielen (Demo, Regular, Premium) eine Konstante zu definieren, die dann im Code darüber entscheidet, was mitcompiliert wird.
Was du machen kannst, ist bei einem PB-Projekt, selber für das Ziel eine Konstante festlegen.
Compiler -> Compiler-Optionen -> Konstanten -> Eigene Konstanten
Und jenachdem welches Ziel erstellt wird, kannst du dann dort zB:
#PB_Compiler_DLL = 1
eingeben und im anderen Fall dann 0.
Sowas verwende ich auch, um zB beim Erstellen von mehreren Zielen (Demo, Regular, Premium) eine Konstante zu definieren, die dann im Code darüber entscheidet, was mitcompiliert wird.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
Toshy
- Beiträge: 713
- Registriert: 22.03.2005 00:29
- Computerausstattung: Computer und Strom vorhanden
- Wohnort: LK Wolfenbüttel
Re: Compilerdirektive DLL oder EXE
Wozu brauchst du das genau zur kompelierungszeit?
An ein oder zwei Stellen brauche ich die Info selbst in meinem Code, aber nicht zur kompelierungszeit.
Aber auch ich hätte so eine Konstante ganz gut gefunden. Aber wirklich wichtig war es bisher nicht. Nur müßte ich dann nicht manuell "attachprocess()" & co. "ausklammern". aber ist ja nur das ändern eines wertes.
An ein oder zwei Stellen brauche ich die Info selbst in meinem Code, aber nicht zur kompelierungszeit.
Aber auch ich hätte so eine Konstante ganz gut gefunden. Aber wirklich wichtig war es bisher nicht. Nur müßte ich dann nicht manuell "attachprocess()" & co. "ausklammern". aber ist ja nur das ändern eines wertes.
1. Win10
PB6.1
PB6.1
Re: Compilerdirektive DLL oder EXE
Genau wie von Stargate vermutet, geht es darum verschiedene Ziele automatisch zu erstellen. Manuelle Eingriffe in den Code sind mir zu fehleranfällig.
Auch wenn es kein Problem ist, aber das mit der eigenen Konstante wollte ich eigentlich vermeiden. Ich bin mir sicher bin, dass ich dann in Zukunft irgendwann verzweifelt suche, wo diese Konstante eigentlich herkommt.
Danke für euere Antworten
Josh
Auch wenn es kein Problem ist, aber das mit der eigenen Konstante wollte ich eigentlich vermeiden. Ich bin mir sicher bin, dass ich dann in Zukunft irgendwann verzweifelt suche, wo diese Konstante eigentlich herkommt.
Danke für euere Antworten
Josh
-
Toshy
- Beiträge: 713
- Registriert: 22.03.2005 00:29
- Computerausstattung: Computer und Strom vorhanden
- Wohnort: LK Wolfenbüttel
Re: Compilerdirektive DLL oder EXE
"Suchen wo die Konstante her kommt"????
Eigenartige Aussage. Egal ob eigene Konstante, die von PB oder Betriebssystem, du mußt dir doch immer merken was die macht bzw. nachschlagen. Man verwendet doch eh ständig eigene Variabeln und Konstannten. Einfach beim ersten verwenden (deklarieren) der Konstante dahinter schreiben was sie macht, falls der Name an sich nicht schon aussagekräftig ist.
Das sollte man ja eh immer machen.
#PB_Compiler_DLL = 1 ; - hier Erklärung. Aber der name ist ja an sich erklärung genug.
PB-Compilerkonstanten sind ja nichts anderes, nur sind die halt schon vorhanden. Bei denen steht die Erklärung halt einfach in der Hilfe.
Was ich aber mit meiner Nachfrage meinte ist, was willst du bei einer DLL anders kompeliert haben als bei einer Exe? An sich ist der Code doch kompett der selbe. Wenn nicht, dann sind es ja unterschiedliche Projekte. Der einzige Unterschied beim programmieren an sich, daß weißt du ja sicher, ist daß bei einer DLL aller Code in Proceduren stehen sollte.
Daher noch mal, was willst du bei einer DLL anders kompeliert haben? würde ich mal intererssieren.
Ich selber bin auch gerade daran Code zu basteln, der mal als DLL und mal direkt in der Exe stehen soll. Selber habe ich aber noch nichts gefunden, was anders kompeliert sein muß. Man könnte zwar die vier "speziellen Proceduren" weg lassen, aber wenn die mit drinn sind, ist es ja nicht schlimm.
So, jetzt bin ich mal neugierig was du da vor hast.
Gruß
Toshy
Eigenartige Aussage. Egal ob eigene Konstante, die von PB oder Betriebssystem, du mußt dir doch immer merken was die macht bzw. nachschlagen. Man verwendet doch eh ständig eigene Variabeln und Konstannten. Einfach beim ersten verwenden (deklarieren) der Konstante dahinter schreiben was sie macht, falls der Name an sich nicht schon aussagekräftig ist.
Das sollte man ja eh immer machen.
#PB_Compiler_DLL = 1 ; - hier Erklärung. Aber der name ist ja an sich erklärung genug.
PB-Compilerkonstanten sind ja nichts anderes, nur sind die halt schon vorhanden. Bei denen steht die Erklärung halt einfach in der Hilfe.
Was ich aber mit meiner Nachfrage meinte ist, was willst du bei einer DLL anders kompeliert haben als bei einer Exe? An sich ist der Code doch kompett der selbe. Wenn nicht, dann sind es ja unterschiedliche Projekte. Der einzige Unterschied beim programmieren an sich, daß weißt du ja sicher, ist daß bei einer DLL aller Code in Proceduren stehen sollte.
Daher noch mal, was willst du bei einer DLL anders kompeliert haben? würde ich mal intererssieren.
Ich selber bin auch gerade daran Code zu basteln, der mal als DLL und mal direkt in der Exe stehen soll. Selber habe ich aber noch nichts gefunden, was anders kompeliert sein muß. Man könnte zwar die vier "speziellen Proceduren" weg lassen, aber wenn die mit drinn sind, ist es ja nicht schlimm.
So, jetzt bin ich mal neugierig was du da vor hast.
Gruß
Toshy
1. Win10
PB6.1
PB6.1
Re: Compilerdirektive DLL oder EXE
Wie und wo ich eine Konstante deklariere, weiß ich selber. Leider hast du nicht verstanden, um was es geht. Ich habe mich auf das Posting von Stargate bezogen und das hat nichts mit der von dir beschriebenen 'normalen' Deklaration von Konstanten zu tun.Toshy hat geschrieben:"Suchen wo die Konstante her kommt"????
Eigenartige Aussage. Egal ob eigene Konstante, die von PB oder Betriebssystem, du mußt dir doch immer merken was die macht bzw. nachschlagen. Man verwendet doch eh ständig eigene Variabeln und Konstannten. Einfach beim ersten verwenden (deklarieren) der Konstante dahinter schreiben was sie macht, falls der Name an sich nicht schon aussagekräftig ist.
Das sollte man ja eh immer machen.
#PB_Compiler_DLL = 1 ; - hier Erklärung. Aber der name ist ja an sich erklärung genug.
PB-Compilerkonstanten sind ja nichts anderes, nur sind die halt schon vorhanden. Bei denen steht die Erklärung halt einfach in der Hilfe.
Eigentlich weiß ich nicht, warum ich mich auf eine einfache Frage rechtfertigen muss, wofür ich das einsetzen will. Aber stell dir ein AddIn für eine fremde Applikation vor. Eine eingeschränkte Testversion gibt es als Exe und die Vollversion ohne Einschränkungen dann als Dll.Toshy hat geschrieben:Was ich aber mit meiner Nachfrage meinte ist, was willst du bei einer DLL anders kompeliert haben als bei einer Exe? An sich ist der Code doch kompett der selbe. Wenn nicht, dann sind es ja unterschiedliche Projekte. Der einzige Unterschied beim programmieren an sich, daß weißt du ja sicher, ist daß bei einer DLL aller Code in Proceduren stehen sollte.
Daher noch mal, was willst du bei einer DLL anders kompeliert haben? würde ich mal intererssieren.
Ich selber bin auch gerade daran Code zu basteln, der mal als DLL und mal direkt in der Exe stehen soll. Selber habe ich aber noch nichts gefunden, was anders kompeliert sein muß. Man könnte zwar die vier "speziellen Proceduren" weg lassen, aber wenn die mit drinn sind, ist es ja nicht schlimm.
So, jetzt bin ich mal neugierig was du da vor hast.
Josh
-
Toshy
- Beiträge: 713
- Registriert: 22.03.2005 00:29
- Computerausstattung: Computer und Strom vorhanden
- Wohnort: LK Wolfenbüttel
Re: Compilerdirektive DLL oder EXE
Fühl dich dich nicht gleich "angegriffen".
Ich habe schon verstanden, daß du dich auf Stargate beziehst. Daher auch meine Frage, weil es genau darauf zutrifft. Der einzige Unterschied ist wie Stargate schon schrieb, das nicht PB die Konstante vor gibt, sondern man die selbst halt vor de compelieren ändern muß. schöner wäre es automatisch, aber ist ja nicht wild. und FALLs man das braucht(, und fällt mir als einziges super Notwendige, weil man je "kunde" der testversion beim download eine extra angepaßte version verschicken will, also dann erst kompeliert), kann man ja beim Aufruf der kompelieren (als konsole) automatisch den quellcode an der zeile der Konstante ändern. also ein eigenes kleines Programm, das die Kompelierung startet und anpaßt.
Und zum "Rechtfertigen", was denkst du dir bitte. Was soll das mit rechtfertigen zu tun haben. Du hast ein Problem und ich frage aus Interesse. "Rechtfertigen", eigenartige Auffassung. Damit hat es wirkich nichts zu tun.
Es ändert zwar nichts bei der Kompelierung, bei der Testversion, aber wenn du nur einen Unterschied beim Aufruf machen willst, nimm einfach die Procedure AttachProcess(). Wenn du in dieser einfach eine globale Variable auf eins setzt wird die in der DLL automatisch beim Laden aufgerufen. In der Exe nicht. Schon könntest du automatisch Funktionen aktivieren oder deaktivieren.
Also einfach
So hab ich das bei mir eingeplant.
Schützt zwar nicht vorm Deassemblieren, aber wer das macht, der kann sich auch einfach die DLL schnappen.
Gruß
Toshy
Nachtag:
Ich sehe gerade du im englischen Forum eine Lösung angeboten bekommen hast.
funktioniert bei mir aber nicht. bei dir?
Ich habe schon verstanden, daß du dich auf Stargate beziehst. Daher auch meine Frage, weil es genau darauf zutrifft. Der einzige Unterschied ist wie Stargate schon schrieb, das nicht PB die Konstante vor gibt, sondern man die selbst halt vor de compelieren ändern muß. schöner wäre es automatisch, aber ist ja nicht wild. und FALLs man das braucht(, und fällt mir als einziges super Notwendige, weil man je "kunde" der testversion beim download eine extra angepaßte version verschicken will, also dann erst kompeliert), kann man ja beim Aufruf der kompelieren (als konsole) automatisch den quellcode an der zeile der Konstante ändern. also ein eigenes kleines Programm, das die Kompelierung startet und anpaßt.
Und zum "Rechtfertigen", was denkst du dir bitte. Was soll das mit rechtfertigen zu tun haben. Du hast ein Problem und ich frage aus Interesse. "Rechtfertigen", eigenartige Auffassung. Damit hat es wirkich nichts zu tun.
Es ändert zwar nichts bei der Kompelierung, bei der Testversion, aber wenn du nur einen Unterschied beim Aufruf machen willst, nimm einfach die Procedure AttachProcess(). Wenn du in dieser einfach eine globale Variable auf eins setzt wird die in der DLL automatisch beim Laden aufgerufen. In der Exe nicht. Schon könntest du automatisch Funktionen aktivieren oder deaktivieren.
Also einfach
Code: Alles auswählen
ProcedureDLL AttachProcess(Instance)
global PB_Compiler_DLL = 1
EndProcedureSchützt zwar nicht vorm Deassemblieren, aber wer das macht, der kann sich auch einfach die DLL schnappen.
Gruß
Toshy
Nachtag:
Ich sehe gerade du im englischen Forum eine Lösung angeboten bekommen hast.
Code: Alles auswählen
#PB_Compiler_Target1. Win10
PB6.1
PB6.1
Re: Compilerdirektive DLL oder EXE
Das funktioniert nur bei dem Benutzer "+1".Toshy hat geschrieben:Ich sehe gerade du im englischen Forum eine Lösung angeboten bekommen hast.funktioniert bei mir aber nicht. bei dir?Code: Alles auswählen
#PB_Compiler_Target
