Condividi tramite


ptr::operator=

Associa un oggetto COM a com::ptr.

ptr<_interface_type> % operator=(
   _interface_type * _right
);

Parametri

  • _right
    Il puntatore all'interfaccia COM da associare.

Valore restituito

Un riferimento di rilevamento in com::ptr.

Eccezioni

Se com::ptr già possiede un riferimento a un oggetto COM, operator= genera InvalidOperationException.

Note

Assegnazione di un oggetto COM a com::ptr fa riferimento all'oggetto COM ma non rilascia il riferimento del chiamante.

Questo operatore ha lo stesso effetto di Attach.

Esempio

In questo esempio viene implementata una classe CLR che utilizza com::ptr per eseguire il wrapping del relativo oggetto di IXMLDOMDocument il membro privato. Le prime Release chiamate di funzione membro di ReplaceDocument su qualsiasi oggetto precedentemente di proprietà e quindi utilizza operator= per associare un oggetto del nuovo documento.

// comptr_op_assign.cpp
// compile with: /clr /link msxml2.lib
#include <msxml2.h>
#include <msclr\com\ptr.h>

#import <msxml3.dll> raw_interfaces_only

using namespace System;
using namespace System::Runtime::InteropServices;
using namespace msclr;

// a ref class that uses a com::ptr to contain an 
// IXMLDOMDocument object
ref class XmlDocument {
public:
   // construct the internal com::ptr with a null interface
   // and use CreateInstance to fill it
   XmlDocument(String^ progid) {
      m_ptrDoc.CreateInstance(progid);   
   }

   // replace currently held COM object with another one
   void ReplaceDocument(IXMLDOMDocument* pDoc) {
      // release current document object
      m_ptrDoc.Release();
      // attach the new document object
      m_ptrDoc = pDoc;
   }

   // note that the destructor will call the com::ptr destructor
   // and automatically release the reference to the COM object

private:
   com::ptr<IXMLDOMDocument> m_ptrDoc;
};

// unmanaged function that creates a raw XML DOM Document object
IXMLDOMDocument* CreateDocument() {
   IXMLDOMDocument* pDoc = NULL;
   Marshal::ThrowExceptionForHR(CoCreateInstance(CLSID_DOMDocument30, NULL,
      CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&pDoc));
   return pDoc;
}


// use the ref class to handle an XML DOM Document object
int main() {
   IXMLDOMDocument* pDoc = NULL;

   try {
      // create the class from a progid string
      XmlDocument doc("Msxml2.DOMDocument.3.0");

      // get another document object from unmanaged function and
      // store it in place of the one held by the ref class
      pDoc = CreateDocument();
      doc.ReplaceDocument(pDoc);
      // no further need for raw object reference
      pDoc->Release();
      pDoc = NULL;
   }
   catch (Exception^ e) {
      Console::WriteLine(e);   
   }
   finally {
      if (NULL != pDoc) {
         pDoc->Release();
      }
   }
}

Requisiti

Header file<msclr\com\ptr.h>

msclr::com diSpazio dei nomi

Vedere anche

Riferimenti

ptr::Attach

ptr::Detach

ptr::Release

Altre risorse

Membri ptr