Seite 4 von 4
Re: Interface - Fragen
Verfasst: 19.08.2017 11:54
von mk-soft
Die Verwendung von Modulen in Dll´s sind nicht gestattet, da..
- Die Deklaration von Arrays, Listen bzw. Maps mittels Dim, NewList bzw. NewMap muss stets innerhalb der Prozedur AttachProcess erfolgen.
Code: Alles auswählen
DeclareModule MyModule
Global name.s
Global NewList Teste.s()
Global Dim Daten.i(1000)
EndDeclareModule
Module MyModule
Global NewList iData.i()
...
Versuche mal eine offizielle Antwort zu kommen.
Re: Interface - Fragen
Verfasst: 19.08.2017 12:59
von Josh
GPI hat geschrieben:Was nicht dokumentiert ist, das PB die Befehle bei einer DLL außerhalb von Proceduren sammelt und dann in die ProcessAttach() packt. Also da wo es eigentlich hin gehört.
Hab ich da was verpasst? Glaube nicht, dass PB das in die AttachProcess() packt. Code außerhalb von Prozeduren wird einfach beim Laden der DLL ausgeführt. Genau das ist nach meiner Meinung das Problem, weil dem Hauptprogramm die Kontrolle weggenommen wird, wann Programmcode ausgeführt werden soll.
AttachProcess() & Co. ist ja keine Erfindung von PB, das sind Windows-Restriktionen, auch wenn sie in den APIs oder anderen Programmiersprachen anders heißen.
Re: Interface - Fragen
Verfasst: 19.08.2017 13:28
von mk-soft
Da rauf achtet schon der Compiler von Purebasic.
Es kommt für die DLL ein Process Attach. Dieser wird von der Compilercode ausgewertet ruft die Procedure PB_DllInit() auf und danach wenn vorhanden die Procedure AttachProcess(). Alles was der Compiler ausserhalb von Prozeduren findet, wird in die Funktion PB_DllInit() verfrachtet.
Mal schauen was im englischen Forum von der offiziellen Seite kommt.
P.S.
Somit ist der Aufruf vom Module 'Global NewList xyz()' auch in der Procedure PB_DllInit().
Das aber widerspricht die Regel das diese nur in der Procedure AttachProcess() erfolgen darf.