Fenster in DLL öffnen geht das?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Fenster in DLL öffnen geht das?

Beitrag von Mijikai »

Folgender Code funktioniert nicht ->

PB.5.60 x64 Win10

DLL (Normal & Threadsafe):

Code: Alles auswählen

ProcedureDLL.i OW()
  ProcedureReturn OpenWindow(#PB_Any,0,0,300,300,"TestFenster",#PB_Window_BorderLess)
EndProcedure
EXE:

Code: Alles auswählen

Import "windowtest.lib"
  OW()
EndImport

If OW()
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Bin mir eigentl. sicher, dass es schonmal funktioniert hat!?
:cry: :freak:
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Fenster in DLL öffnen geht das?

Beitrag von GPI »

muss dann nicht alles, was mit Fenster-handling zu tun hat, auch in der DLL ablaufen? Die haben doch alle getrennte "Nummern" etc, oder Synchronisiert sich die PB Exe mit der PB DLL?
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Fenster in DLL öffnen geht das?

Beitrag von Mijikai »

Danke :)

So gehts... (bin mir aber fast sicher das es mal einfacher funtioniert hat).

DLL:

Code: Alles auswählen

ProcedureDLL.i OW()
  ProcedureReturn OpenWindow(#PB_Any,0,0,300,300,"TestFenster",#PB_Window_BorderLess|#PB_Window_SystemMenu)
EndProcedure

ProcedureDLL.i WE()
  ProcedureReturn WaitWindowEvent()
EndProcedure
EXE:

Code: Alles auswählen

Import "windowtest.lib"
  OW()
  WE()
EndImport

If OW()
  Repeat
    If WE() = #PB_Event_CloseWindow
      Break
    EndIf
  ForEver
EndIf
Bin verwirrt :coderselixir:
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Fenster in DLL öffnen geht das?

Beitrag von mk-soft »

Die DLL hat eine eigene Instanz.

Achtung! das geht nur unter Windows
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Fenster in DLL öffnen geht das?

Beitrag von Kukulkan »

Hallo,

sorry, aber immer wenn ich so etwas lese...
Fenster in DLL öffnen geht das?
...bin ich mir sicher, dass ein Design-Fehler vorliegt. Es gibt wirklich nur ganz ganz wenige gute Gründe, so etwas tun zu wollen.

Wenn es dann doch (irgendwie) geht, dann kann es der Grund für seltsame Abstürze, Memory-Leaks und andere schwer zu findende Symptome sein. Ich rate dringend dazu, das Programm-Design so anzupassen, dass in den Libs nur Funktionen ohne GUI ausgeführt werden. Die GUI sollte immer im Haupt-Programm und dort im Haupt-Thread(!) gestaltet und verwendet werden.

Grüße,

Kukulkan
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Fenster in DLL öffnen geht das?

Beitrag von Mijikai »

Danke für die Infos.
So wie es jetzt aussieht werde ich dem Hauptprogramm die Fenstergenerierung überlassen.
(Ich versuche mein kleines GUI-Module in eine DLL zu packen.)
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Fenster in DLL öffnen geht das?

Beitrag von HeX0R »

Kukulkan hat geschrieben:Hallo,

sorry, aber immer wenn ich so etwas lese...
Fenster in DLL öffnen geht das?
...bin ich mir sicher, dass ein Design-Fehler vorliegt. Es gibt wirklich nur ganz ganz wenige gute Gründe, so etwas tun zu wollen.
Öhm, es gibt schon gute Gründe sowas machen zu wollen, ich habe zum Beispiel ein Tool, das Dlls als Plugins nutzt, und die Plugins brauchen I.d.R. auch eigenständige Fenster.
Das funktioniert im übrigen fehlerfrei (auch unter Linux), wenn man alle Events per Bindbefehlen in der Dll verarbeitet und die Hauptschleife im Hauptprogramm verbleibt.
Hatte mich allerdings ehrlich gesagt auch gewundert, dass es da nicht knallt :mrgreen:
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Fenster in DLL öffnen geht das?

Beitrag von mk-soft »

Alle Proceduren die mit BindEvent gebunden werden laufen im Mainscope. Also da wo WaitWindowEvent aufgerufen wird...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Fenster in DLL öffnen geht das?

Beitrag von GPI »

mk-soft hat geschrieben:Alle Proceduren die mit BindEvent gebunden werden laufen im Mainscope. Also da wo WaitWindowEvent aufgerufen wird...
Auch wenn bind in der DLL ausgerufen wird? Das BindEvent von der DLL weis doch nichts von der Main.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Fenster in DLL öffnen geht das?

Beitrag von Kukulkan »

Öhm, es gibt schon gute Gründe sowas machen zu wollen
Ja, PlugIns die GUI brauchen sind so ein Beispiel für die ganz wenigen guten Gründe :-)
Antworten