Seite 1 von 1

Module und ProcedureDLL

Verfasst: 18.08.2014 02:06
von STARGÅTE
Tachchen,

beim Annäherungsversuch an Module stoße ich gerade wieder auf ein Problem in Verbidung mit der Erstellung einer DLL.

Ein Include ist aktuell so aufgebaut, dass es auch als DLL kompiliert werden kann. Ähnlich wie bei Modulen sind dann natürlich nur die Proceduren aufrufbar, die ein ProcedureDLL haben. Allerdings meckern nun Module das keine ProcedureDLL vorkommen darf.

Wie kann ich nun beides unter ein Hut bringen, also ein Modul erstellen und auch die Erstellung einer DLL ermöglichen?

Re: Module und ProcedureDLL

Verfasst: 18.08.2014 07:37
von Bisonte
Solange nur innerhalb von Modulen "angemeckert" wird, sollte es doch kein Problem darstellen.

Ich meine sowas sollte doch funktionieren :

Code: Alles auswählen

ProcedureDLL Foo(abc)
  d = abc + MyMod::Modul(abc)
  ProcedureReturn d
EndProcedure
Oder ist das am Ziel vorbeigeschossen ?

Re: Module und ProcedureDLL

Verfasst: 18.08.2014 08:08
von Nino
STARGÅTE hat geschrieben:Wie kann ich nun beides unter ein Hut bringen, also ein Modul erstellen und auch die Erstellung einer DLL ermöglichen?
Diese beiden Konzepte passen leider in PB momentan nicht gut zusammen. :-(

Du kannst das mit Hilfe von bedingter Compilierung machen, etwa so:

Code: Alles auswählen

#CreateDLL = #True


CompilerIf #CreateDLL = #False
   DeclareModule Foo
      ; ...
   EndDeclareModule
   
   Module Foo
CompilerEndIf
   
   
CompilerIf #CreateDLL = #False
   Procedure Bar()
CompilerElse
   ProcedureDLL Bar()
CompilerEndIf
      ; ...   
   EndProcedure
   
CompilerIf #CreateDLL = #False
   EndModule
CompilerEndIf
Das ist natürlich nicht schön.

Oder Du schreibst erst das Modul, und schreibst dann die benötigten ProcedureDLLs zusätzlich außerhalb des Moduls als Wrapper für die öffentlichen Modul-Funktionen. Auch nicht schön.

Ich würde es sehr begrüßen, wenn PBs Möglichkeiten zur DLL-Erzeugung an das neue Modul-Konzept angepasst würden, z.B. indem man ein bestehendes Modul nehmen kann, und dann statt "DeclareModule" "DeclareDLLModule" schreibt.