Seite 1 von 2

Compilerdirektive DLL oder EXE

Verfasst: 04.06.2012 16:28
von Josh
hallo,

gibt es irgendeine möglichkeit zur kompilierungszeit festzustellen, ob gerade eine dll oder exe erstellt wird?

josh

Re: Compilerdirektive DLL oder EXE

Verfasst: 04.06.2012 19:03
von Nino
Josh hat geschrieben:gibt es irgendeine möglichkeit zur kompilierungszeit festzustellen, ob gerade eine dll oder exe erstellt wird?
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.

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

Re: Compilerdirektive DLL oder EXE

Verfasst: 05.06.2012 00:07
von Falko
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

Re: Compilerdirektive DLL oder EXE

Verfasst: 05.06.2012 00:27
von STARGÅTE
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.

Re: Compilerdirektive DLL oder EXE

Verfasst: 05.06.2012 04:09
von Toshy
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.

Re: Compilerdirektive DLL oder EXE

Verfasst: 06.06.2012 18:17
von Josh
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

Re: Compilerdirektive DLL oder EXE

Verfasst: 07.06.2012 02:11
von Toshy
"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

Re: Compilerdirektive DLL oder EXE

Verfasst: 07.06.2012 20:52
von Josh
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.
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: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.
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.

Josh

Re: Compilerdirektive DLL oder EXE

Verfasst: 07.06.2012 22:06
von Toshy
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

Code: Alles auswählen

ProcedureDLL AttachProcess(Instance)
 global PB_Compiler_DLL = 1   
EndProcedure
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.

Code: Alles auswählen

#PB_Compiler_Target
funktioniert bei mir aber nicht. bei dir?

Re: Compilerdirektive DLL oder EXE

Verfasst: 08.06.2012 07:18
von Nino
Toshy hat geschrieben:Ich sehe gerade du im englischen Forum eine Lösung angeboten bekommen hast.

Code: Alles auswählen

#PB_Compiler_Target
funktioniert bei mir aber nicht. bei dir?
Das funktioniert nur bei dem Benutzer "+1". ;-)