CComQIPtr is better than QueryInterface |
Top Previous Next |
Instead of doing a QueryInterface where you have to worry about Release etc., you can sometimes use a CComQIPtr, like this:
CComQIPtr<DimensionConstraint> pDimConstraint ; // It is null now (cannot be initialised to NULL) for (long iDim = 1 ; iDim <= ikNumRetDims ; iDim++) {
TRACE (L"Looking at dim %d of %d\n",iDim,ikNumRetDims) ;
// Look at the nth dimension in the collection... IDispatchPtr pNthDim; hRes = pAllRetCollection->get_Item(_variant_t(iDim), &pNthDim); if (FAILED (hRes)) { ShowCOMError (hRes,L"ShowNamedRetDimInView Could not get_Item %d",iDim) ; return ; }
pDimConstraint = pNthDim ; // This can be tested for NULL
if (pDimConstraint != NULL) { // We have a DimensionConstraint, what is the name of the model parameter?
CComPtr/CComQIPtr perform automatic reference counting for you (for example, they call Release on the interface attached to them, when the smart-pointer variable goes out of scope).
And CComQIPtr is null when you first create it. See comment on first line of the code above.
|
Text, images and diagrams © 2021 Owen F. Ransen. All rights reserved. (But copy the source code as much as you want!)