Module und ProcedureDLL

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Module und ProcedureDLL

Beitrag 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?
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
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Module und ProcedureDLL

Beitrag 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 ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Module und ProcedureDLL

Beitrag 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.
Antworten