[solved]Probleme mit Funktionsparameter + DLL

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

[solved]Probleme mit Funktionsparameter + DLL

Beitrag von Blackskyliner »

Hi
mal wieder ein DLL bezogenes Problem meinerseits.

Ich rufe aus meiner DLL eine Funktion auf, die mir das Programm, was die DLL einbindet übergibt. Dieser Funktion übergebe ich dann über das Argument eine Adresse auf eine Struktur...

Die Funktion kann dann alle Werte lesen bis auf einen, mit dem ich so meine Problem habe. Diese Variable ist ein Zeiger auf den Speicher einer Variable (in meinem Testfall ein String). ZUerst dachte ich es liegt daran, dass der String global definiert sein muss, auf den ich in meiner Struktur verweise.
Dem war aber leider nicht so. Wenn ich allerdings allen Code nicht getrennt in _ein_ Programm schreibe und das ausführe, dann funktionierts...
Also kann es ja nur irgendeine Farce sein die ich übersehe...
Wäre nett wenn da mal jemand drüber gehen könnte... Ich poste nur die wichtigsten Stellen.

testDLL.pb

Code: Alles auswählen

; == Enumerations ==
Enumeration
	#MT_Main
	#MT_Module
	#MT_Observer
EndEnumeration

; == Observer messages ==
Enumeration
	#M_addObserver
	#M_deleteObserver
EndEnumeration

; == Module messages ==

; == Main messages ==
Enumeration 
	#M_debug
EndEnumeration
;}

;{ == Structures ==
Structure sharedFunctions_struct
	; Communication functions
	*sendMessage
EndStructure

Structure moduleMessage_struct
	messageType.l
	message.l
	*argument
	flag.l
EndStructure
;}

; [...]

;{ == Global Things ==
Global *sharedFunctions.sharedFunctions_struct
Global tempString.s
;}

; [...]

;{ == Main Worker ==
ProcedureDLL Worker(*nullVar)
	;Wait to get the sharedFunctions
	Repeat : Delay(1) : Until *sharedFunctions <> #Null
	
	
	
	Define.moduleMessage_struct temp
	
	temp\messageType = #MT_Main
	temp\message = #M_debug
	
	tempString = "Successful loaded."
	;,PokeS()
	temp\argument = @tempString
	
	
	
	MessageRequester("DLL", "Send Message.")
	CallFunctionFast(*sharedFunctions\sendMessage, @temp)
EndProcedure
;}


testLoader.pb

Code: Alles auswählen

; == Enumerations ==
Enumeration
	#MT_Main
	#MT_Module
	#MT_Observer
EndEnumeration

; == Observer messages ==
Enumeration
	#M_addObserver
	#M_deleteObserver
EndEnumeration

; == Module messages ==

; == Main messages ==
Enumeration 
	#M_debug
EndEnumeration
;}

;{ == Structures ==
Structure sharedFunctions_struct
	; Communication functions
	*sendMessage
EndStructure

Structure moduleMessage_struct
	messageType.l
	message.l
	*argument
	flag.l
EndStructure
;}

; [...]

Procedure sendMessage(*message.moduleMessage_struct)
	MessageRequester("DEBUG", "In Message")
	Select *message\messageType
		Case #MT_Main
			MessageRequester("DEBUG", "MainCase")

;Hier schmiert der ab...
			MessageRequester("Catched Mainmessage", PeekS(*message\argument))
	EndSelect
EndProcedure

;[...]

Wäre echt genial wenn jemand wüsste wie ich den Fehler beheben könnte... Weil das Argument soll ein Zeiger bleiben, da es ja nicht nur Strings sondern auch mein ein Integer, Float, etc. sein soll. Je nach messageType halt...


MFG
Blackskyliner
Zuletzt geändert von Blackskyliner am 26.02.2009 23:07, 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 »

Der Code ist nicht testbar.
Bitte so abändern das man ihn laufen lassen kann.
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 »

Kein Problem hier das ganze Projekt

http://blacky.happyscripts.de/Downloads ... System.rar

<)
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 »

Das wirst du jetzt sicher nicht gerne lesen.
Aber funzt problemlos mit PB 4.30 auf meinem Rechner. :lol:

Ich bekomme den String korrekt übertragen und die MessageBox zeigt ihn mir an. Muss im Projekt natürlich noch Str durch PeekS ersetzen, wie in deinem Beispielcode.
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 »

Immer diese Käfer in der Suppe <)

Jo,kann man nix machen wird wohl ein Bug in 4.2 sein also nun doch komplett umsteigen. Danke dir fürs Testen :allright:
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