Verfasst: 24.02.2009 01:13
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...
Dann geht es auch...
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
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
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