// cl tst-getcontacts.cpp include\SCM3A_i.c -I include ole32.lib oleaut32.lib // #define _WIN32_DCOM 1 #define _WIN32_WINNT 0x0500 #include #include #include #include #include "scm3a.h" int main() { HRESULT hr= CoInitializeEx(0,COINIT_MULTITHREADED); if (hr) { printf("CoInitializeEx: %08lx\n", hr); return 1; } IUnknown *pu=NULL; hr= CoCreateInstance(CLSID_PhonebookSuite3, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pu); if (hr) { printf("CoCreateInstance: %08lx\n", hr); CoUninitialize(); return 1; } printf("pu=%08lx : %08lx[%08lx %08lx] %08lx\n", pu, ((DWORD*)pu)[0], ((DWORD**)pu)[0][0], ((DWORD**)pu)[0][1], ((DWORD*)pu)[1]); IPhonebook3 *pb3=NULL; hr = pu->QueryInterface(IID_IPhonebook3, (void**)&pb3); if (hr) { printf("pu->QueryInterface: %08lx\n", hr); CoUninitialize(); return 1; } printf("pb3=%08lx\n", pb3); IContact2 *ct2=NULL; for (long i=1 ; i<0x10 ; i++) { hr = pb3->GetContact(MODE_ABSOLUTE, KEY_LOCATION, PHYS_MEM_ALL, LOG_MEM_ALL, &i, NULL, &ct2); if (hr) { printf("IPhonebook::GetContact(%d): %08lx\n", i, hr); } else { long nflds= 0; HRESULT hrc= ct2->get_AmountOfFields(&nflds); if (hrc) { printf("IContact::AmountOfFields: %08lx\n", hrc); break; } printf("%d: %4d", i, nflds); for (long j=0 ; jput_FieldIndex(j); if (hrf) { printf("ct2->FieldIndex(%d): %08lx\n", j, hrf); break; } FieldType ft; hrf= ct2->get_ValueType(&ft); if (hrf) { printf("ct2->ValueType: %08lx\n", hrf); break; } printf(" %4d", ft); BSTR name; hrf= ct2->get_StringValue(&name); if (hrf) { printf("ct2->StringValue: %08lx\n", hrf); break; } printf(" %ls\n", *name); } } } CoUninitialize(); return 0; }