none
请问,我使用wua的get_DownloadUrl()时 报错 怎么解决啊? RRS feed

  • 问题

  •    wchar_t buffer[max_size];
       IUpdateDownloadContent *downloadContent;
       IUpdateDownloadContentCollection *downloadCollection;
       BSTR url;
       Update->get_DownloadContents(&downloadCollection);
       downloadCollection->get_Item(0,&downloadContent);
       ret = downloadContent->get_DownloadUrl(&url);
       memset(buffer, '\0', max_size);
       swprintf(buffer, L"KB%s", url);
       wprintf(L"%s\n", buffer);

    在get_DownloadUrl()的这行报错,报的错误是 处未处理异常:0xc0000005:读取位置0x00000000时发生访问冲突
    2009年12月14日 10:02

答案

  • 谢谢Micheael !问题已解决
    按照你的方法,我看到Count为0,的确没有得到downloadContent,
    所以我参照http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/ad4f7f55-90d7-4de8-826d-dc4d44d19632的方法,从get_BundledUpdates()获得updatecollecion,然后从它的get_Item()重新获得update,最终获得了正确的url。
       IUpdateCollection *updateCollection;
       IUpdateDownloadContent *downloadContent;
       IUpdateDownloadContentCollection *downloadCollection;
       BSTR url;

       Update->get_BundledUpdates(&updateCollection);
       updateCollection->get_Item(0,&Update);
       Update->get_DownloadContents(&downloadCollection);

       downloadCollection->get_Item(0,&downloadContent);
       ret = downloadContent->get_DownloadUrl(&url);
    • 已标记为答案 Nancy Shao 2009年12月16日 6:45
    2009年12月16日 2:57

全部回复

  • 0xc0000005 访问违例. 我没在wua上进行过编程,不过从错误上来看。应该是downloadCollection->get_Item(0,&downloadContent);这一步获取的downloadContent 指针就是空的。也就是说,Update->get_DownloadContents(&downloadCollection); 获取到的downloadCollection集合对象里面就没有成员,这个集合对象本身就是空的。你可以加一行代码判断一下downloadCollection 对象的Count属性,看看是否为空?



    2009年12月15日 2:44
    版主
  • 谢谢Micheael !问题已解决
    按照你的方法,我看到Count为0,的确没有得到downloadContent,
    所以我参照http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/ad4f7f55-90d7-4de8-826d-dc4d44d19632的方法,从get_BundledUpdates()获得updatecollecion,然后从它的get_Item()重新获得update,最终获得了正确的url。
       IUpdateCollection *updateCollection;
       IUpdateDownloadContent *downloadContent;
       IUpdateDownloadContentCollection *downloadCollection;
       BSTR url;

       Update->get_BundledUpdates(&updateCollection);
       updateCollection->get_Item(0,&Update);
       Update->get_DownloadContents(&downloadCollection);

       downloadCollection->get_Item(0,&downloadContent);
       ret = downloadContent->get_DownloadUrl(&url);
    • 已标记为答案 Nancy Shao 2009年12月16日 6:45
    2009年12月16日 2:57
  • 每调用一次COM接口的方法或者COM相关函数就判断一次 HRESULT是否 SUCCEEDED,有助于问题的排查
    2009年12月17日 4:19
    版主