Seite 1 von 1

XML-Objekt aus DLL übergeben

Verfasst: 01.02.2008 11:46
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

Verfasst: 01.02.2008 13:18
von edel
Gar nicht, da die DLL ihre eigene Objektliste hat. Da koennte man
hoechtens mit nem Hack dran gehen.

Verfasst: 01.02.2008 13:22
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

Verfasst: 01.02.2008 13:35
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?

Verfasst: 01.02.2008 13:51
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: