Kann Delphi-DLL mit IDOMNode nicht unter VC++ nutzen



  • Hallo

    bin mir nicht sicher, ob diese Frage nun im Delphi-Forum oder in nem C-Forum angebracht ist. Hoffe mal, dass mir jemand weiterhelfen kann.

    Ich habe eine Delphi-DLL mit mehreren stdcalls :

    procedure registerModule(name, info : PChar); stdcall;
    ...
    
    procedure unregisterModule; stdcall;
    ...
    
    procedure setFunction (fctName : PChar; fct : TFunction;
      fctParams, fctResults : IDOMNode; fctInfo : PChar; fctType : TFunctionType);
      stdcall;
    ...
    

    Die Deklaration unter VC++ sieht so aus

    typedef void (__stdcall *TFunction1)(LPCSTR,IXMLDOMNodePtr (*TFunction3)(IXMLDOMNodePtr),IXMLDOMNodePtr,IXMLDOMNodePtr,LPCSTR,TFctType);
    
    ...
    
    dllFunction1 = (TFunction1)GetProcAddress(hMyLib, "setFunction");
    
    ...
    
    IXMLDOMNodePtr paramset = NULL;
    IXMLDOMNodePtr resultset = NULL;
    
    IXMLDOMDocumentPtr pXMLDoc = NULL;
    
    // Aufbau von paramset und resultset
    			EVAL_HR(pXMLDoc.CreateInstance("Msxml2.DOMDocument.4.0"));
    			IXMLDOMProcessingInstructionPtr pPI = NULL;
    
    			pPI = pXMLDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
    
    			_variant_t vNullVal;
    			vNullVal.vt = VT_NULL;
    			pXMLDoc->insertBefore(pPI, vNullVal);
    
    			paramset = pXMLDoc->createElement("paramset");
    			IXMLDOMNodePtr DOMNode1 = NULL;
    			DOMNode1 = paramset->appendChild(pXMLDoc->createElement("param"));
    			IXMLDOMAttributePtr attr = NULL;
    			attr = pXMLDoc->createAttribute("type");
    			attr->text = "integer";
    			DOMNode1->attributes->setNamedItem(attr);
    			attr = pXMLDoc->createAttribute("name");
    			attr->text = "x1";
    			DOMNode1->attributes->setNamedItem(attr);
    			DOMNode1 = paramset->appendChild(pXMLDoc->createElement("param"));
    			attr = pXMLDoc->createAttribute("type");
    			attr->text = "integer";
    			DOMNode1->attributes->setNamedItem(attr);
    			attr = pXMLDoc->createAttribute("name");
    			attr->text = "x2";
    			DOMNode1->attributes->setNamedItem(attr);
    
    			resultset = pXMLDoc->createElement("resultset");
    			DOMNode1 = resultset->appendChild(pXMLDoc->createElement("result"));
    			attr = pXMLDoc->createAttribute("type");
    			attr->text = "integer";
    			DOMNode1->attributes->setNamedItem(attr);
    			attr = pXMLDoc->createAttribute("integer");
    			attr->text = "res";
    			DOMNode1->attributes->setNamedItem(attr); 
    
    if (!dllFunction1 == NULL) {
      dllFunction1("add",&add,paramset,resultset,"addiert",provided);
    }
    

    Das Aufrufen der ersten beiden Prozeduren klappt reibungslos. Das Problem liegt an den Parametern fctParams und fctResults vom Typ IDOMNode. Sobald ich auf diese Parameter zugreifen möchte, gibts ne Exception.
    Ich nutze sowohl in der DLL als auch unter VC++ MSXML. Unter VC++ gibt es dafür den IXMLDOMNodePtr, IXMLDOMNode geht nicht. Die Zeigeradressen stimmen sowohl in VC++ als auch der DLL überein, das hab ich mir ausgeben lassen. Ich habe dann auch mal in Delphi einen Typ IDOMNodePtr = ^IDOMNode deklariert, und diesen in die Parameterliste gesetzt und dann mit ftpParams^ gearbeitet, leider das selbe Resultat.

    Ich hoffe, jemand kann mir helfen.

    Gruss, Pierre



  • Problem behoben. Hab unter Delphi mal ne andere Unit-eingebunden, die ein Pendant zur C++-Header-Datei ist.


Anmelden zum Antworten