2014-10-02 4 views
-4

Я уже несколько часов ломаю голову над этим: pClient всегда NULL (0x000000). pClient, похоже, не инициализируется так же, как ISkypePtr, IUserCollectionPtr и IUserPtr?Инициализация ISkypeClientPtr

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); 
    } 
} 

ответ

-1

Вы не прикладываете никаких усилий для инициализации pClient: в двух других случаях, вы даете ему CLSID для создания экземпляра и вы присваиваете его из указателя COM объекта, который вы получили обратно. Я предполагаю, что вы хотите следующее:

// Start client 
IClientPtr pClient = pSkype->GetClient(); 
if (pClient->IsRunning == VARIANT_FALSE) 
    pClient->Start(VARIANT_FALSE, VARIANT_FALSE); 

(взято из this project on GoogleCode). Это не обязательно должно быть в цикле while, предполагая, что вы не планируете закрывать клиента после каждого запроса на контакт.

Но, пожалуйста, используйте это ответственно, а не для создания запросов на контакт со спамом. Благодарю.

+0

Спасибо, работал для меня. Я бы сказал, что не знаю, как я пропустил GetClient в документах API, но я был на 36 + hrs, когда я опубликовал это ... – Oloty