ptr::operator=

Asocia un objeto COM a com::ptr.

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

Parámetros

  • _right
    El puntero COM de interfaz a adjuntar.

Valor devuelto

Una referencia de seguimiento en com::ptr.

Excepciones

Si com::ptr ya posee una referencia a un objeto COM, operator= produce InvalidOperationException.

Comentarios

Asignando un objeto COM a com::ptr hace referencia al objeto COM pero no libera la referencia del llamador para ella.

Este operador tiene el mismo efecto que Attach.

Ejemplo

Este ejemplo implementa una clase CLR que utilice com::ptr para ajustar su objeto de IXMLDOMDocument miembro privado.Llamadas Release de funciones miembro de ReplaceDocument las primeras en cualquier poseyeron previamente el objeto y usan operator= para asociar un nuevo objeto de 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();
      }
   }
}

Requisitos

archivo de encabezado <msclr \ COM \ ptr.h>

Msclr::com deespacio de nombres

Vea también

Referencia

ptr::Attach

ptr::Detach

ptr::Release

Otros recursos

miembros de la PTR