Я несколько часов ломал голову над этим: pClient всегда равен NULL (0x000000). pClient, кажется, не инициализируется так же, как ISkypePtr, IUserCollectionPtr и IUserPtr?
ISkypePtr pSkype(__uuidof(Skype));
while (TRUE){
IUserCollectionPtr pResults = pSkype->SearchForUsers("john doe");
for (int i = 1; i <= pResults->Count; ++i){
IUserPtr pUser = pResults->GetItem(i); _bstr_t handle = pUser->GetHandle();
IClientPtr pClient;
pClient->OpenAddContactDialog(handle);
Sleep(30000);
}
}
Вы не предпринимаете никаких усилий для инициализации pClient
: в двух других случаях вы даете ему CLSID для создания экземпляра и назначаете его из указателя COM-объекта, который вы получили обратно. Я предполагаю, что вы хотите следующее:
// Start client
IClientPtr pClient = pSkype->GetClient();
if (pClient->IsRunning == VARIANT_FALSE)
pClient->Start(VARIANT_FALSE, VARIANT_FALSE);
(взято из этот проект на GoogleCode). Это не обязательно должно быть в цикле while, если вы не планируете закрывать клиент после каждого запроса контакта.
Но, пожалуйста, используйте это ответственно, а не для генерации спам-запросов. Благодарю.