CoCreateInstance返回成功,但是组件虚表没有没初始化成功??

void_main_void 2018-03-20 03:44:10

HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!SUCCEEDED(hr))
{
Sleep(100000);

hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!SUCCEEDED(hr))
{
return -1;
}
}

CComPtr<IPortableDeviceManager> deviceManager;

hr = CoCreateInstance(CLSID_PortableDeviceManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&deviceManager));
if (SUCCEEDED(hr))
{
init_com_interface<IPortableDeviceManager*>(deviceManager);
}


上述代码在调用CoCreateInstance是返回成功的,但是观察deviceManager的指针虚表却指向的内存为CDxxxxxx的内存地址。虚表却没有正常被替换为函数内容。这是为何?? 其实前两周这段代码还是能用的,在win10上。今天继续调试就不行了。。。
系统是win10 64位
...全文
374 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Guan975 2018-03-20
  • 打赏
  • 举报
回复
注意返回值DWORD 取值范围
void_main_void 2018-03-20
  • 打赏
  • 举报
回复
忘记64位DWORD取值范围了,傻逼了一下午。。。曹
赵4老师 2018-03-20
  • 打赏
  • 举报
回复
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。 且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll 在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe 在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe 64 位 Windows 平台注意点之文件系统重定向 http://www.cnblogs.com/jiake/p/4981555.html 64 位 Windows 平台注意点之注册表重定向 http://www.cnblogs.com/jiake/p/4956218.html

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧