questa è probabilmente una domanda COM di noob, ma su Google questo solleva più domande che fornire risposte:È sicuro utilizzare C++ "operator new" piuttosto che CoCreateinstance per creare un oggetto COM?
È sicuro utilizzare "operatore nuovo" invece di CoCreateInstance per un'istanza COM locale?
quello che ho fatto:
ho implementato l'interfaccia IOperationsProgressDialog http://msdn.microsoft.com/en-us/library/windows/desktop/bb775368(v=vs.85).aspx utilizzando ereditarietà pubblica e quindi anche implementato l'interfaccia IUnknown.
Ho creato un'istanza tramite "nuovo RecyclerProgressCallback" e l'ho inserita in un COM-Ptr per la gestione della vita. "RecyclerProgressCallback" è il nome della mia classe derivata.
Sto usando questo esempio nel IFileOperation :: SetProgressDialog http://msdn.microsoft.com/en-us/library/windows/desktop/bb775803(v=vs.85).aspx
Riassunto: Il mio approccio "sembra" funzionare, ma non mi fido, non c'è informazioni davvero troppo sconcertante intorno Creazione di oggetti COM per fare affidamento solo sul comportamento osservabile.
Ci sono dei rischi sottili, errori o altri problemi? Grazie!
> basta ignorare l'intera logica COM. Questo era quello che speravo di sentire! Andando alla lettura lunga, la registrazione di nuovi oggetti COM non sarebbe stata solo dolorosa in Visual C++ Express, ma avrebbe anche danneggiato la mia applicazione in modo "portatile". – Zenju
Bene, devi ancora implementare correttamente 'IUnknown' dato che fa parte dell'interfaccia' IOperationsProgressDialog' che stai promettendo. Per esempio. il tuo 'IOperationsProgressDialog :: QueryInterface (IID_IUnknown)' deve avere successo ecc. – MSalters
Sì, l'ho fatto. È buono IUnknown è una classe base astratta, quindi ho notato gli errori del compilatore solo dopo aver implementato IOperationsProgressDialog. Quindi, l'intera procedura è solo ordinaria implementazione di funzioni virtuali in C++ ... questo è stato più semplice di quanto mi aspettassi da COM, il che mi rende sospetto. – Zenju