VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 4153|回复: 8

[求助] win10 的 winhttp.dll

[复制链接]
30_avatar_middle
在线会员 发表于 2016-4-10 19:42:06 | 显示全部楼层 |阅读模式
20驿站币
在win10 上使用 #import "c:\\windows\system32\\winhttp.dll" no_namespace  
直接提示 无法打开类型库文件: “c:\windows\system32\winhttp.dll”。。。目录下有这个文件
在win7上正常。。

把 win7 上 的 winhttp.dll拷过来后,正常使用。。
但是 在使用 IWinHttpRequestEvents 事件 异步下载的时候,执行到 Send 的时候就会报错。。以上在 win7上都是正常的。。
有没有高手也遇到过这样的情况。。帮忙解决下。。谢谢 win10 的 winhttp.dll





上一篇:pfile->QueryInfoStatusCode(dwStatusCode);
下一篇:关于窗口背景贴图
30_avatar_middle
ico_lz  楼主| 发表于 2016-4-10 20:01:45 | 显示全部楼层
附上 代码  在win7上一切OK
win10 上就是不行


#include "stdafx.h"
#import "winhttp.dll" named_guids


//winhttp对象事件实例化类
struct WinHttpRequestEventClass : public IUnknown
{
public:
        virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid,  void __RPC_FAR *__RPC_FAR *ppvObject)
        {
                MessageBoxA(NULL, "QueryInterface", "查询接口", MB_OK);
                return 0;
        }
        virtual ULONG STDMETHODCALLTYPE AddRef(void)
        {
                MessageBoxA(NULL, "Addref", "增加计数", MB_OK);
                return 0;
        }
        virtual ULONG STDMETHODCALLTYPE Release(void)
        {
                MessageBoxA(NULL, "Release", "减少计数", MB_OK);
                delete this;
                return 0;
        }
        virtual void __stdcall OnResponseStart(long Status, BSTR ContentType)//开始下载事件
        {
                MessageBoxA(NULL, "OnResponseStart", "开始下载", MB_OK);
        }
        virtual void __stdcall OnResponseDataAvailable(SAFEARRAY** Data)//数据接受事件
        {
                printf("%lu\n", (const char*)((*Data)->rgsabound[0].cElements));//数据大小
                printf("%s", (const char*)((*Data)->pvData));//数据内容
        }
        virtual void __stdcall OnResponseFinished()//完成事件
        {
                MessageBoxA(NULL, "OnResponseFinished", "完成下载", MB_OK);
        }
        virtual void __stdcall OnError(long ErrorNumber, BSTR ErrorDescription)//错误事件
        {
                MessageBoxA(NULL, "OnError", "发生错误", MB_OK);
        }
};

int main(int argc, char* argv[])
{
        CoInitialize(NULL);
        WinHttp::IWinHttpRequestPtr WinHttpRequestPtr(WinHttp::CLSID_WinHttpRequest);
        IConnectionPointContainerPtr ConnectionPointContainerPtr;
        WinHttpRequestPtr->QueryInterface(IID_IConnectionPointContainer, (void**)&ConnectionPointContainerPtr);
        IConnectionPointPtr ConnectionPointPtr;
        ConnectionPointContainerPtr->FindConnectionPoint(WinHttp::IID_IWinHttpRequestEvents, &ConnectionPointPtr);
        DWORD dwCookie;
        ConnectionPointPtr->Advise((IUnknown*)new WinHttpRequestEventClass, &dwCookie);
        WinHttpRequestPtr->Open("GET", "http://www.baidu.com", true);
        WinHttpRequestPtr->Send();
        WinHttpRequestPtr->WaitForResponse();
        CoUninitialize();
        return 0;
}
51_avatar_middle
online_admins 发表于 2016-4-10 22:48:56 | 显示全部楼层
青干剑 发表于 2016-4-10 20:01
附上 代码  在win7上一切OK
win10 上就是不行


手头没有 win10 环境,那就只能用 try-catch 捕获下异常了,具体看看是什么原因
30_avatar_middle
ico_lz  楼主| 发表于 2016-4-10 23:00:54 | 显示全部楼层
Syc 发表于 2016-4-10 22:48
手头没有 win10 环境,那就只能用 try-catch 捕获下异常了,具体看看是什么原因

内存异常。。无法 try-catch吧。。打算改 winint 写了。。也就是个下载。。直接调试状态。。到 send 就内存异常了
51_avatar_middle
online_admins 发表于 2016-4-10 23:24:38 | 显示全部楼层
青干剑 发表于 2016-4-10 23:00
内存异常。。无法 try-catch吧。。打算改 winint 写了。。也就是个下载。。直接调试状态。。到 send 就内 ...

应该可以 try-catch,加上试试
24_avatar_middle
在线会员 发表于 2016-4-11 13:28:29 | 显示全部楼层
win8.1可以,win10调用COM组件有点问题,我用win10调用VC驿站的编程助手出了同样的问题,如果楼主解决了麻烦说一下怎么解决的谢谢。
77_avatar_middle
在线会员 发表于 2016-11-18 19:33:32 | 显示全部楼层
试试 winhttpcom.dll
51_avatar_middle
online_admins 发表于 2017-1-9 09:40:44 | 显示全部楼层
楼上正解,win7 下是 winhttp.dll,到了 win10 下就是 winhttpcom.dll 了,简单改下代码即可
32_avatar_middle
在线会员 发表于 2017-4-26 09:20:32 | 显示全部楼层
注册winhttpcom.dll显示没DllRegistrServer入口点怎么办??
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-19 08:38

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表