ptr::ptr
Costruisce com::ptr per eseguire il wrapping di un oggetto COM.
ptr();
ptr(
_interface_type * p
);
Parametri
- P
Puntatore a interfaccia COM.
Note
Il costruttore no-pia argomento nullptr assegna a un oggetto sottostante. Le chiamate successive a com::ptr verranno convalidati l'oggetto invisibile all'interno e avranno esito negativo fino a creare o collegare un oggetto effettivamente.
Il costruttore di un solo argomento viene aggiunto un riferimento all'oggetto COM ma non rilascia il riferimento del chiamante, il chiamante deve chiamare Releaseoggetto COM true per interrompere il controllo. Se il distruttore di com::ptr viene chiamato automaticamente da eliminare i riferimenti all'oggetto COM.
Passando NULL a questo costruttore è lo stesso di chiamare la versione no-pia argomento.
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. Viene illustrato l'utilizzo di entrambe le versioni del costruttore.
// comptr_ptr.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);
}
// construct the internal com::ptr with a COM object
XmlDocument(IXMLDOMDocument* pDoc) : 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;
};
// use the ref class to handle an XML DOM Document object
int main() {
IXMLDOMDocument* pDoc = NULL;
try {
// create an XML DOM document object
Marshal::ThrowExceptionForHR(CoCreateInstance(CLSID_DOMDocument30, NULL,
CLSCTX_ALL, IID_IXMLDOMDocument, (void**)&pDoc));
// construct the ref class with the COM object
XmlDocument doc1(pDoc);
// or create the class from a progid string
XmlDocument doc2("Msxml2.DOMDocument.3.0");
}
// doc1 and doc2 destructors are called when they go out of scope
// and the internal com::ptr releases its reference to the COM object
catch (Exception^ e) {
Console::WriteLine(e);
}
finally {
if (NULL != pDoc) {
pDoc->Release();
}
}
}
Requisiti
Header file<msclr\com\ptr.h>
msclr::com diSpazio dei nomi