Ist ja schön, dass du an den Parameter bei der Thread-Prozedur gedacht hast, aber AttachProcess() und DetachProcess() benötigen auch einen.
Dann geht es auch...
Prinzipfragen zu DLL gestütztem Modulsystem
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- Blackskyliner
- Beiträge: 532
- Registriert: 28.07.2005 00:54
- Wohnort: /home/Blackskyliner/
Danke.
Jetzt funktioniert alles, da kann ich mich ja endlich ransetzen und auch was damit umsetzen. Muss mir unbedingt merken das so ziemlich alles einen ersten Parameter hat xD.


Jetzt funktioniert alles, da kann ich mich ja endlich ransetzen und auch was damit umsetzen. Muss mir unbedingt merken das so ziemlich alles einen ersten Parameter hat xD.




Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
pointer (zeiger, speicheradressen) sind niemals von einem nativen PB TypBlackskyliner hat geschrieben:Ahh, ok dachte nur, da Zeiger ja eine Adresse sind dass man die halt als .l machen muss da eine Adresse ja Als Zahl wiedergespiegelt wird. K.A. wo ich diese Art und weise her hab, irgendwo mal aufgeschnappt. Klappt irgendwie trotzdem nichtImmernoch Memory Access Error
(.l, .i, .w, .b, .s, .q)!
richtig:
*zeiger
auch richtig:
*zeiger.integer
(dies ist kein nativer Typ, sondern lediglich eine Strukture, die den Zugriff
vereinfacht)
falsch:
*zeiger.l
*zeiger.i
usw.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Blackskyliner
- Beiträge: 532
- Registriert: 28.07.2005 00:54
- Wohnort: /home/Blackskyliner/
Ich wollte bloß mal noch meinen Fortschritt hier posten und Fragen was man an dem internen Handling der einzelnen Module verändern oder gar verbessern könnte...
Das Script nutzt die EasyVent Funktionen von purecoder.net
PS.: Ist nur relativ schnell gemacht, soll aber das Grundsystem bilden und dass sollte nicht grade irgendwie buggy sein und auch nicht grade _der_ Performancekiller. Ich freue mich über jeden Hinweis, der den Loader verbessert 
Declares für die Funktionen mach ich demnächst noch
Und dann noch ne Prinzip frage... gibt es eine möglichkeit, dass ich Daten zwischen den einzelnen Modulen austauschen lassen kann? Ich habe mir gedacht das ich einen MessageStack als Array oder Liste anlege, über den ich dann in einem Repeat Zyklus eine Funktion der Libarys aufrufe, wenn diese denn vorhanden ist. Nur wie kann ich von der Libary aus Daten in den Loader bekommen, zum austausch?? Über eine weitere Funktion, die mir dann ein MessageStack von dem Modul zurückgibt?? Wie würdet ihr es denn regeln?
Ich danke für alle Hinweise, muss auch nicht unbedingt COde sein sondern einfach nur die Theorie. Soll ja auch schlißlich was dabei lernen
MFG
Blackskyliner
Das Script nutzt die EasyVent Funktionen von purecoder.net
Code: Alles auswählen
XIncludeFile "EasyVENT.pbi"
Define w.l, wev.l
Global moduleDirectory$ = "./modules/";
Structure loadedModules_struct
id.l
name.s
isLoaded.b
shouldLoaded.b
EndStructure
Global NewList loadedModules.loadedModules_struct();
w = OpenWindow(0,0,0,300,300,"ModuleLoader v0.2 Beta", #PB_Window_SizeGadget | #PB_Window_SystemMenu)
If w
If CreateGadgetList(WindowID(0));
TreeGadget(0,0,0,0,0)
ListIconGadget(1,0,0,0,0,"Module", 100, #PB_ListIcon_CheckBoxes)
Else
End
EndIf
Else
End
EndIf
Procedure resizeGadgets(*sender.PB_Sender = #Null)
ResizeGadget(0,0,0,WindowWidth(0)/2, WindowHeight(0));
ResizeGadget(1,WindowWidth(0)/2,0,WindowWidth(0)/2, WindowHeight(0));
EndProcedure
resizeGadgets()
Procedure loadModules()
Protected id.l
ForEach loadedModules()
If loadedModules()\shouldLoaded = #True And loadedModules()\isLoaded = #False
id = OpenLibrary(#PB_Any, moduleDirectory$+loadedModules()\name)
loadedModules()\id = id;
loadedModules()\isLoaded.b = #True;
EndIf
If loadedModules()\shouldLoaded = #False And loadedModules()\isLoaded = #True
CloseLibrary(loadedModules()\id)
loadedModules()\id = #Null;
loadedModules()\isLoaded.b = #False;
EndIf
Next
EndProcedure
Procedure readModules()
If ExamineDirectory(0, moduleDirectory$, "*.dll")
While NextDirectoryEntry(0)
AddElement(loadedModules())
loadedModules()\id = #Null
loadedModules()\name = DirectoryEntryName(0);
loadedModules()\isLoaded.b = #False;
loadedModules()\shouldLoaded = #False
AddGadgetItem(1, -1, DirectoryEntryName(0))
Wend
FinishDirectory(0)
EndIf
EndProcedure
readModules()
Procedure checkBoxHandle(*sender.PB_Sender)
Protected clickedElement.l, clickedName.s, clickedState.l
clickedElement = *sender\wParam & $FFFF;
clickedName = GetGadgetItemText(1,clickedElement-1)
clickedState = *sender\state - 1
ForEach loadedModules()
If clickedName = loadedModules()\name
If clickedState = 0
loadedModules()\shouldLoaded = #True
Else
loadedModules()\shouldLoaded = #False
EndIf
EndIf
Next
EndProcedure
Procedure Close(*sender.PB_Sender)
PerformDefaultWinProcessing(*sender)
ProcedureReturn #Event_ReturnDefault
EndProcedure
SetEventHandler(WindowID(0), #OnClose, @Close())
SetEventHandler(WindowID(0), #OnResize, @resizeGadgets())
SetEventHandler(GadgetID(1), #OnItemCheckboxChanging , @checkBoxHandle())
Repeat
loadModules();
wev = WaitWindowEvent()
Until wev = #PB_Event_CloseWindow
End

Declares für die Funktionen mach ich demnächst noch

Und dann noch ne Prinzip frage... gibt es eine möglichkeit, dass ich Daten zwischen den einzelnen Modulen austauschen lassen kann? Ich habe mir gedacht das ich einen MessageStack als Array oder Liste anlege, über den ich dann in einem Repeat Zyklus eine Funktion der Libarys aufrufe, wenn diese denn vorhanden ist. Nur wie kann ich von der Libary aus Daten in den Loader bekommen, zum austausch?? Über eine weitere Funktion, die mir dann ein MessageStack von dem Modul zurückgibt?? Wie würdet ihr es denn regeln?
Ich danke für alle Hinweise, muss auch nicht unbedingt COde sein sondern einfach nur die Theorie. Soll ja auch schlißlich was dabei lernen

MFG
Blackskyliner
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher