T
Trumba
I am using Items.SetColumns to speed up retrieval of a calendar from C++
(Outlook9 object model). Once I locate an interesting row, I want to get the
corresponding AppointmentItem and dig deeper. The problem is that the object
returned for the row will not QueryInterface to an _AppointmentItem
interface.
CComBSTR columns = "LastModificationTime";
result = items->SetColumns( columns);
CComPtr<IDispatch> item;
CComVariant index(1);
result = items->Item( index, &item);
CComQIPtr<_AppointmentItem> appointment = item;
// appointment is NULL due to E_NOINTERFACE
The Item method returns IDispatch and I can access properties with
IDispatch::Invoke, so I thought I could get the EntryID and open the item
from that. However, that particular property returns 0x6543 as an error.
What is that?
:ISPPARAMS params;
params.rgvarg = NULL;
params.rgdispidNamedArgs = NULL;
params.cArgs = 0;
params.cNamedArgs = 0;
CComVariant property;
DISPID dispId = 0x3008; // LastModificationTime
result = item->Invoke( dispId, IID_NULL, (LCID)0, DISPATCH_PROPERTYGET,
¶ms, &property, NULL, NULL);
// Retrieved LastModificationTime column
dispId = 0x37; // Subject
result = item->Invoke( dispId, IID_NULL, (LCID)0, DISPATCH_PROPERTYGET,
¶ms, &property, NULL, NULL);
// Subject was not a column but can still get it
EXCEPINFO info;
dispId = 0xf01e; // EntryID
result = item->Invoke( dispId, IID_NULL, (LCID)0, DISPATCH_PROPERTYGET,
¶ms, &property, &info, NULL);
// Why does this return result = 0x6543??
What's the proper pattern to do this sort of thing?
(Outlook9 object model). Once I locate an interesting row, I want to get the
corresponding AppointmentItem and dig deeper. The problem is that the object
returned for the row will not QueryInterface to an _AppointmentItem
interface.
CComBSTR columns = "LastModificationTime";
result = items->SetColumns( columns);
CComPtr<IDispatch> item;
CComVariant index(1);
result = items->Item( index, &item);
CComQIPtr<_AppointmentItem> appointment = item;
// appointment is NULL due to E_NOINTERFACE
The Item method returns IDispatch and I can access properties with
IDispatch::Invoke, so I thought I could get the EntryID and open the item
from that. However, that particular property returns 0x6543 as an error.
What is that?
:ISPPARAMS params;
params.rgvarg = NULL;
params.rgdispidNamedArgs = NULL;
params.cArgs = 0;
params.cNamedArgs = 0;
CComVariant property;
DISPID dispId = 0x3008; // LastModificationTime
result = item->Invoke( dispId, IID_NULL, (LCID)0, DISPATCH_PROPERTYGET,
¶ms, &property, NULL, NULL);
// Retrieved LastModificationTime column
dispId = 0x37; // Subject
result = item->Invoke( dispId, IID_NULL, (LCID)0, DISPATCH_PROPERTYGET,
¶ms, &property, NULL, NULL);
// Subject was not a column but can still get it
EXCEPINFO info;
dispId = 0xf01e; // EntryID
result = item->Invoke( dispId, IID_NULL, (LCID)0, DISPATCH_PROPERTYGET,
¶ms, &property, &info, NULL);
// Why does this return result = 0x6543??
What's the proper pattern to do this sort of thing?