VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 225|回复: 5

[已解决]指针这个绕不明白了 求大佬解答

[复制链接]
59_avatar_middle
最佳答案
0 
在线会员 发表于 2019-10-28 15:40:19 | 显示全部楼层 |阅读模式
CoInitialize(NULL);
        IWinHttpRequest * phttp = NULL;
        HRESULT hr = CoCreateInstance(__uuidof(WinHttpRequest), NULL, CLSCTX_ALL, __uuidof(IWinHttpRequest), (LPVOID *)&phttp);
        if (FAILED(hr))
        {
                MessageBox(_T("error"));
                return;
        }
CoUninitialize()

红色部分我弄不明白了 CoCreateInstance函数的第四个参数要求传入的是LPVOID    *ppv
为什么 传入的参数 phttp 要加个& 呢 ?它本身不就是 IWinHttpRequest 类型的指针变量么 那 直接传递(LPVOID *)phttp 为什么会错 我知道我错了 但是我绕不出来了呢
求大佬解答
最佳答案
01_avatar_small
2019-10-28 15:51:53
一句话:通过参数传递指针的时候:传递1级指针能改变指针指向的内容,传递2级指针能改变指针的指向。
这里面  IWinHttpRequest * phttp = NULL; 是这样定义的,phttp 是指向了 NULL,所以你想往里面写东西肯定会崩溃的,所以CoCreateInstance函数的最后一个参数肯定不会想要个 IWinHttpRequest 类型的指针。相反他要改变指针的指向,也就是说在 CoCreateInstance 函数内部会帮你把对象创建好,之后让你传个2级指针进去指向这个创建好的对象上。所以这块他肯定是要个 IWinHttpRequest 类型的2级指针。

再看一点,LPVOID 是什么类型?VOID 是空类型,所以 LPVOID 就是 void* 类型,也就是个1级指针,那么,很显然 LPVOID* 就是2级指针,所以你直接用个 phttp 这个1级指针强转成2级指针肯定是不行的。




上一篇:《实用C++》第38课中运算符重载编译错误问题(详见帖子内容)
下一篇:MFC CListView类 怎么取消横向滚动条?
59_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-10-28 15:51:30 | 显示全部楼层
后续
ppv

Address of pointer variable that receives the interface pointer requested in riid. Upon successful return, *ppv contains the requested interface pointer. Upon failure, *ppv contains NULL.

额 看了下msdn  是函数要求传入的就是指针变量的地址 是么 那是我理解错了 是么 ! 大佬们是嘛。。。
01_avatar_middle
最佳答案
39 
online_admins 发表于 2019-10-28 15:51:53 | 显示全部楼层    本楼为最佳答案   
bestAnswer
一句话:通过参数传递指针的时候:传递1级指针能改变指针指向的内容,传递2级指针能改变指针的指向。
这里面  IWinHttpRequest * phttp = NULL; 是这样定义的,phttp 是指向了 NULL,所以你想往里面写东西肯定会崩溃的,所以CoCreateInstance函数的最后一个参数肯定不会想要个 IWinHttpRequest 类型的指针。相反他要改变指针的指向,也就是说在 CoCreateInstance 函数内部会帮你把对象创建好,之后让你传个2级指针进去指向这个创建好的对象上。所以这块他肯定是要个 IWinHttpRequest 类型的2级指针。

再看一点,LPVOID 是什么类型?VOID 是空类型,所以 LPVOID 就是 void* 类型,也就是个1级指针,那么,很显然 LPVOID* 就是2级指针,所以你直接用个 phttp 这个1级指针强转成2级指针肯定是不行的。
81_avatar_middle
最佳答案
3 
online_supermod 发表于 2019-10-28 15:52:46 | 显示全部楼层
admin 发表于 2019-10-28 15:51
一句话:通过参数传递指针的时候:传递1级指针能改变指针指向的内容,传递2级指针能改变指针的指向。
这里 ...

刚要回答,看到站长已经回答的很详细了,我就不班门弄斧了,哈哈!
59_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-10-28 15:55:03 | 显示全部楼层
admin 发表于 2019-10-28 15:51
一句话:通过参数传递指针的时候:传递1级指针能改变指针指向的内容,传递2级指针能改变指针的指向。
这里 ...

谢谢谢谢 太厉害了 懂了
59_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-10-28 15:56:04 | 显示全部楼层
Debug 发表于 2019-10-28 15:52
刚要回答,看到站长已经回答的很详细了,我就不班门弄斧了,哈哈!

谢谢啦 谢谢啦指针这个绕不明白了 求大佬解答
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

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

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

GMT+8, 2020-11-27 10:52

Powered by CcTry.CoM

© 2009-2020 cctry.com

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