The following example performs a query of documents located on a
1.x Server. The query is based upon keywords assigned to the document.
void CAdmin1Dlg::OnImgquery()
{
int iReturn;
// Perform the query and put results in objResults
CString szDB = "test_db:";
VARIANT vDB; vDB.vt = VT_BSTR; V_BSTR(&vDB) =
szDB.AllocSysString();
lbResults.ResetContent();
// Call ImgQuery( ); get a CStringCollect's IDispatch*.
LPDISPATCH idispStringCollect=NULL;
iReturn = ImgAdmin1.ImgQuery(vDB, "finddocs keyword = insurance",
&idispStringCollect);
if (iReturn == 0)
{
IStringCollect* pIStringCollect;
TRY
{
// Make new IStringCollect* and attach the Dispatch pointer
pIStringCollect = new IStringCollect;
pIStringCollect->AttachDispatch(idispStringCollect, TRUE);
// Call CStringCollect's Get_NewEnum( );
// get CEnumVARIANT's IUnknown*
IUnknown* pEnumVarIUnknown = 0;
pEnumVarIUnknown = pIStringCollect->Get_NewEnum();
if (pEnumVarIUnknown)
{
// Call CEnumVARIANT IUnknown's QueryInterface;
// get an IEnumVARIANT*
IEnumVARIANT* pIEnumVariant = 0;
pEnumVarIUnknown->QueryInterface(IID_IEnumVARIANT,
(void**)&pIEnumVariant);
if(pIEnumVariant)
{
// Call the IEnumVARIANT's Next( ) till all strings
// are retrieved
VARIANT vName;
while (S_OK == pIEnumVariant->Next(1, &vName, NULL))
{
lbResults.AddString((CString)V_BSTR(&vName));
}
iReturn = 0;
pIEnumVariant->Release();
}
pEnumVarIUnknown->Release();
}
pIStringCollect->ReleaseDispatch();
delete pIStringCollect;
ImgAdmin1.ImgQueryEnd();
}
CATCH_ALL (e)
{
CString msg;
pIStringCollect->ReleaseDispatch();
delete pIStringCollect;
ImgAdmin1.ImgQueryEnd();
msg.Format("Unexpected error 0x%lX", ((COleException *)e)->m_sc);
MessageBox(msg);
}
END_CATCH_ALL
}
}