Prinzipfragen zu DLL gestütztem Modulsystem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Prinzipfragen zu DLL gestütztem Modulsystem

Beitrag von Blackskyliner »

Hallo,
ich wollte mal wissen ob und wie ich in einer DLL einen Thread starten kann.
Der Hintergrnd:
Ich will ein kleines Pluginähnliches System bauen, wo die DLL die geladen wird durch AttachProccess() sich selber einen Thread startet und sich dort dann weiterhin selber ausführt. Nun bekomme ich aber bei meinem kleinen Testcode einen MemoryAccess error.

Deshalb erstmal die grundlegende Frage: "Ist es überhaupt möglich im AttachProccess() ein CreateThread() auszuführen?"

Danke für jede Antwort :)

MFG
Blackskyliner


EDIT: Titel von "Thread in einer DLL?" umbenannt zu "Prinzipfragen zu DLL gestütztem Modulsystem"
Zuletzt geändert von Blackskyliner am 24.02.2009 02:23, insgesamt 1-mal geändert.
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
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Code bitte.
Generell geht das.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Dafür brauchst eine extra Prozedur, die nach dem Laden manuell
aufgerufen werden muss. Ich mein mich zumindest erinnern zu können,
dass ich das selbe auch mal wollte, aber es ist laut MSDN nicht erlaubt.
Angaben ohne Gewähr

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
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:

Beitrag von HeX0R »

Den MemoryAccess-Error bekommst du bestimmt, weil du (wie üblich) deiner Thread-Prozedur keinen Parameter spendiert hast...
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Der Thread hat schon seine Var von mir bekommen. PMV das selbe hab ich auch gelesen, soweit ich das aber verstanden hab, haben das einige in VB oder so mal so geregelt,das die das einfach aus den Attach in eine Extra Funktion auslagerten und da dann einen Thread gecalled haben.
Das selbe habe ich versucht un dscheinbar daran gescheitert.
Wäre halt einfach schön, dass ich nicht eine feste Funktion, innerhalb meines Programems aufrufen müsste dass es Funktioniert, wenns aber allgemein nicht geht, da lass ichs.

Hier noch den Code den ich habe. Wenn das Jemand zum laufen bekommen würede, wäre ich äußerst entzückt =)

Test.dll

Code: Alles auswählen

DeclareDLL DLLMain()
DeclareDLL Worker(*nullVar.l)


ProcedureDLL AttachProcess()
	;Initialize all Variables und Call DLLMain 
	;to avoid the Call Loop documented on MSDN
	DLLMain()
	
EndProcedure

ProcedureDLL DLLMain()
	;Create the Worker Thread
	CreateThread(@Worker(), 0)
EndProcedure

ProcedureDLL Worker(*nullVar.l)
	;Say that you loaded... Hopefully sometimes...
	MessageRequester("DLL", "Successful loaded.")
EndProcedure

ProcedureDLL DetachProcess()
	;Clear all initialized Variables
EndProcedure
und hier der Schnippsel mit dem ichs Teste.

Code: Alles auswählen

OpenLibrary(0, "Test.dll")

Sleep_(10000)

Bin dankbar für jede Hilfe und jeden nützlichen und verwertbaren Gedanken.

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
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Wenn ich Recht habe ist das nicht möglich. Dann ist eine Init-Prozedur die
gängige Methode und eigentlich auch kein Beinbruch. :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Der Code funktioniert wunderbar mit PB 4.30 Final auf meinem Rechner.

Das Problem könnte einfach sein das du Threadsave nicht aktiviert hast?
Du nutzt in dem Thread Strings, da _musst_ du Threadsave aktivieren.

@PMV: Klar ist das möglich. ^^
Die Einschränkung ist nur, das die Attach-Prozedur nur einen Thread starten darf.

Was mir grad noch einfällt, mach mal das .l bei "DeclareDLL Worker(*nullVar.l)" weg. Glaube aber das PB das da sowieso ignoriert. Ansonsten würde es bei 64Bit Kompilierung krachen.
Zuletzt geändert von Thorium am 24.02.2009 00:47, insgesamt 1-mal geändert.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Bekomm immernoch den Fehler. Werd mir da halt mal 4.3 laden :D

Nur das Problem ist dass ich einige ältere Projekte nicht kompellieren konnte und deswegen erstmal auf der 4.2 hängen geblieben bin... Werd ich einfach die 4.3 in ein ANderes Verzeichniss installieren und da gehts dann hoffentlich. Ich melde mich später nochmal ;)

Achja und Threadsave war wirklich deaktiv :oops: , hat aber an der Sache selber nichts verändert.

Wäre aber trotzdem cool, wenn man das noch irgendwie unter 4.2 Zum laufen bekähme...
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
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

:mrgreen:

Ha, das was ich mein ging glaub ich generell nur um DLLs, die in
AttachProzess nicht geladen werden dürfen ... das starten eines Threads
hab ich auch so umgesetzt. :lol: ... hät mal auf meinen Code schauen
sollen. /:->

Ich hatte es mit der 4.2 erfolgreich umgesetzt.
Deine ganzen .l sind übrigends fehlerhaft. Zeiger sind ihr eigener Datentyp.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

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 nicht :( Immernoch Memory Access Error
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
Antworten