我已经为此绞尽脑汁好几个小时了: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循环中执行此操作。
但请负责任地使用它,而不是用于生成垃圾邮件联系请求。谢谢