Aktuelle Zeit: 17.09.2019 04:34

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 13:51 
Offline

Registriert: 29.08.2004 13:18
@mksoft
oha.
Wobei ich persönlich da von einen Bug reden würde. Entweder sammelt PB allen code außerhalb der Routinen ein und packt automatisch in die Procedure oder es sollte eine Fehlermeldung schmeißen, das bei einer DLL kein Code außerhalb sein darf.

Wobei wie gesagt, ich das Global in Proceduren komisch finde, das hat da einfach nichts zu suchen. Wobei PB auch zwischen Protected und Define unterscheidet - was auch immer der unterschied sein soll.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 14:19 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Bei Modulen für DLL´s verwende ich immer diesen Aufbau...
Somit wird die Regel eingehalten das man bei DLL´s Listen, Maps und Arrays nur in Prozeduren Initialisiert werden dürfen.
Dazu gehören auch Zuweisungen von Startwerten. Habe so meine Erfahrungen gesammelt das wohl Code außerhalb von Prozeduren sonst den Stack zerschiessen. Und das nur bei DLL´s

Code:
DeclareModule MyModule
  Declare DoAny(Index)
EndDeclareModule

Module MyModule
 
  Procedure InitModule()
    Global Dim MyArray(1)
    Global NewList MyList()
    MyArray(0) = 100
  EndProcedure : InitModule()
 
  Procedure DoAny(Index)
    ProcedureReturn MyArray(Index)
  EndProcedure
 
EndModule

Debug MyModule::DoAny(0)


DLL´s sind irgendwie ein Sonderfall...

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 17:51 
Offline
Benutzeravatar

Registriert: 10.10.2014 13:14
Wohnort: Wolfenbüttel
Also MyModule::InitModule() hätte ich jetzt in AttachProcess() gepackt ... der Aufruf von MyModule::InitModule() ist doch auch schon Code außerhalb von Proceduren, oder nicht? ... dann kann ich also auch zig andere eigene Funktionen aufrufen?

Finde das alles sehr "schwammig"

_________________
weil einfach einfach einfach ist ... mach' ich es anders


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 19:30 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Nicht ganz...

InitModule() ist von Type Void und somit das gleiche wie PB intern auch seine eigenen Prozeduren aufrufen um die Libraries zu initialisiert.
Habe mich schon sehr lange damit beschäftigt.
Somit erzeugen die Macros für mein OOP BaseClass und BaseClassDispatch immer gekapselte Prozeduren, damit diese auch in DLL´s funktionieren.

Es ist schon sehr schwammig, da von Fred immer noch nicht keine eindeutige Aussage bekommen habe.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 20:34 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Wie man sieht packt Purebasic alle Codes außerhalb von Prozeduren in die PB interne Prozedur PB_DLLInit
und ruft somit die eigene Prozedur InitModule (_Procedure2) auch richtig auf.
Zitat:
;
; PureBasic 5.71 beta 1 LTS (Windows - x64) generated code
;
; (c) 2019 Fantaisie Software
;
; The header must remain intact for Re-Assembly
;
; :DLL
; LinkedList
; Object
; SimpleList
; Array
; :System
; kernel32.lib
; :Import
;
format MS64 COFF
;
;
extrn PB_NewList
extrn PB_FreeList
extrn PB_FreeObjects
extrn PB_InitArray
extrn PB_InitList
extrn GetModuleHandleW
extrn HeapCreate
extrn HeapDestroy
extrn memset
extrn SYS_AllocateArray
public _PB_Instance
public PB_ExecutableType
public PB_OpenGLSubsystem
public _PB_MemoryBase
public PB_Instance
public PB_MemoryBase
public PB_EndFunctions
public _DLLEntryPoint@12

macro pb_public symbol
{
public _#symbol
public symbol
_#symbol:
symbol:
}

macro pb_align value { rb (value-1) - ($-_PB_DataSection + value-1) mod value }
macro pb_bssalign value { rb (value-1) - ($-_PB_BSSSection + value-1) mod value }

;
section '.code' code readable executable align 4096
;
;
_DLLEntryPoint@12:
SUB rsp,40
CMP rdx,1
JNE .SkipProcessAttach
MOV [_PB_Instance],rcx
CALL PB_DllInit
JMP .End
.SkipProcessAttach:
CMP rdx,2
JNE .SkipThreadAttach
JMP .End
.SkipThreadAttach:
CMP rdx,0
JNE .SkipProcessDetach
CALL _PB_EOP
JMP .End
.SkipProcessDetach:
CMP rdx,3
JNE .SkipThreadDetach
.SkipThreadDetach:
.End:
MOV rax,1
ADD rsp,40
RET
;
PB_DllInit:
SUB rsp,40
XOR r8,r8
MOV rdx,4096
XOR rcx,rcx
CALL HeapCreate
MOV [PB_MemoryBase],rax
CALL PB_InitArray
CALL PB_InitList

; DeclareModule MyModule
; Declare DoAny(Index)
; EndDeclareModule
;
; Module MyModule
;
CALL _Procedure2
;
;
; EndModule
;
;
ADD rsp,40
RET
_PB_EOP:
SUB rsp,40
CALL PB_EndFunctions
MOV rcx,[PB_MemoryBase]
CALL HeapDestroy
ADD rsp,40
RET
PB_EndFunctions:
SUB rsp,40
CALL PB_FreeObjects
ADD rsp,40
RET
;
; Procedure InitModule()
_Procedure2:
PUSH rbp
PUSH r15
PS2=64
SUB rsp,40
; Global Dim MyArray(1)
SUB rsp,24
MOV rdx,2
LEA rax,[mymodule.a_MyArray]
PUSH rax
XOR r9,r9
MOV r8,21
MOV rcx,8
SUB rsp,32
CALL SYS_AllocateArray
ADD rsp,64
MOV qword [mymodule.a_MyArray],rax
; Global NewList MyList()
PUSH qword [mymodule.t_MyList]
POP rcx
CALL PB_FreeList
MOV r9,21
XOR r8,r8
LEA rdx,[mymodule.t_MyList]
MOV rcx,8
CALL PB_NewList
; MyArray(0) = 100
MOV rbp,qword [mymodule.a_MyArray]
MOV qword [rbp+0],100
; EndProcedure : InitModule()
_EndProcedureZero3:
XOR rax,rax
_EndProcedure3:
ADD rsp,40
POP r15
POP rbp
RET
;
section '.data' data readable writeable
;
_PB_DataSection:
PB_OpenGLSubsystem: db 0
pb_public PB_DEBUGGER_LineNumber
dd -1
pb_public PB_DEBUGGER_IncludedFiles
dd 0
pb_public PB_DEBUGGER_FileName
db 0
pb_public PB_Compiler_Unicode
dd 1
pb_public PB_Compiler_Thread
dd 0
pb_public PB_Compiler_Purifier
dd 0
pb_public PB_Compiler_Debugger
dd 0
pb_public PB_Compiler_DPIAware
dd 0
PB_ExecutableType: dd 0
pb_align 8
pb_align 8
pb_align 8
s_s:
dq 0
dq -1
pb_align 8
;
section '.bss' readable writeable
_PB_BSSSection:
pb_bssalign 8
;
I_BSSStart:
_PB_MemoryBase:
PB_MemoryBase: rq 1
_PB_Instance:
PB_Instance: rq 1
PB_ExitCode: rq 1
;
pb_bssalign 8
PB_DataPointer rq 1
pb_bssalign 8
pb_bssalign 8
pb_bssalign 8
pb_bssalign 8
mymodule.a_MyArray:
rq 1
rq 1
mymodule.t_MyList rq 2
I_BSSEnd:
section '.data' data readable writeable
SYS_EndDataSection:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 19.05.2019 10:33 
Offline
Benutzeravatar

Registriert: 10.10.2014 13:14
Wohnort: Wolfenbüttel
Gut zu wissen, danke :allright:

Hier wäre wirklich mal eine eindeutige Aussage von Fred fällig!

_________________
weil einfach einfach einfach ist ... mach' ich es anders


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye