XML-Objekt aus DLL übergeben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

XML-Objekt aus DLL übergeben

Beitrag von Kiffi »

Hallo,

ich möchte in einer DLL ein XML-Objekt erzeugen und es an die aufrufende
EXE übergeben.

DLL:

Code: Alles auswählen

EnableExplicit

Global oXML.l

ProcedureDLL.l XmlObjectFromDll()
  Protected sXML.s = "<hallo />"
  oXML = CatchXML(#PB_Any, @sXML, Len(sXML))
  ProcedureReturn oXML
EndProcedure
In der aufrufenden Exe bekomme ich zwar irgendeine Adresse in oXML
zurückgeliefert, aber IsXML(oXML) liefert eine 0 und RootXMLNode(oXML)
schlägt fehl.

EXE:

Code: Alles auswählen

EnableExplicit

Define hDLL.l, hXmlObjectFromDll.l, oXML.l

hDLL = OpenLibrary(#PB_Any, "dll.dll")
    
hXmlObjectFromDll = GetFunction(hDLL, "XmlObjectFromDll")
oXML = CallFunctionFast(hXmlObjectFromDll)
  
Debug oXML
Debug IsXML(oXML)
Debug RootXMLNode(oXML)
  
CloseLibrary(hDLL)
Wie muss ich das Objekt übergeben?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Gar nicht, da die DLL ihre eigene Objektliste hat. Da koennte man
hoechtens mit nem Hack dran gehen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

edel hat geschrieben:Gar nicht, da die DLL ihre eigene Objektliste hat.
OK, das beruhigt mich insofern, als dass ich schon dachte, die einfachsten
Dinge nicht mehr hinzubekommen. ;-)
edel hat geschrieben:Da koennte man hoechtens mit nem Hack dran gehen.
nicht nötig. Dann werde ich zwischen DLL und EXE halt XML-Strings hin- und
hertauschen. Das passt schon.

Danke für Deine Info & Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

edel: Könnte man das nicht relativ zum Anfang des Speicherbuffers, in den die DLL geladen wird, berechnen? Oder, anders gefragt, wie kénnte man die Adresse dieses Speicherbereichs rauskriegen? Der Prozess, der dir DLL làdt, soltle ja theoretisch (zumindest èber Umwege) auch in ihren Speicherbereich reinschreiben kénnen, denk ich mal, oder irre ich mich?
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Im Prinzip muesste man nur die Objectliste uebergeben (init(object))
und dort dann die vorhandene ueberschreiben. Und am ende wieder
zurueckschreiben.

Code: Alles auswählen

Import ""
	PB_Xml_Objects	
EndImport
Heute abend koennte ich es mal versuchen. Muss jetzt aber zur Arbeit :(


Edit:
Es geht nicht, das heisst es geht schon, fuehrt aber nur zu weiteren
Problemen, und auf die hab ich kein Bock :roll:
Antworten