[solved]Probleme mit Funktionsparameter + DLL
Verfasst: 26.02.2009 22:03
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
testLoader.pb
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
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