Seite 1 von 2

Fenster in DLL öffnen geht das?

Verfasst: 01.08.2017 18:25
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:

Re: Fenster in DLL öffnen geht das?

Verfasst: 01.08.2017 18:40
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?

Re: Fenster in DLL öffnen geht das?

Verfasst: 01.08.2017 18:51
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:

Re: Fenster in DLL öffnen geht das?

Verfasst: 01.08.2017 19:12
von mk-soft
Die DLL hat eine eigene Instanz.

Achtung! das geht nur unter Windows

Re: Fenster in DLL öffnen geht das?

Verfasst: 02.08.2017 10:27
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

Re: Fenster in DLL öffnen geht das?

Verfasst: 02.08.2017 11:59
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.)

Re: Fenster in DLL öffnen geht das?

Verfasst: 02.08.2017 18:52
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:

Re: Fenster in DLL öffnen geht das?

Verfasst: 02.08.2017 22:14
von mk-soft
Alle Proceduren die mit BindEvent gebunden werden laufen im Mainscope. Also da wo WaitWindowEvent aufgerufen wird...

Re: Fenster in DLL öffnen geht das?

Verfasst: 03.08.2017 06:42
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.

Re: Fenster in DLL öffnen geht das?

Verfasst: 03.08.2017 08:46
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 :-)