Chinaunix首页 | 论坛 | 博客
  • 博客访问: 576064
  • 博文数量: 79
  • 博客积分: 2513
  • 博客等级: 少校
  • 技术积分: 806
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-04 18:46
文章分类

全部博文(79)

文章存档

2014年(1)

2010年(5)

2009年(8)

2008年(11)

2007年(41)

2006年(13)

我的朋友

分类: WINDOWS

2010-01-13 00:43:36

使用了 WTL 的 CHyperLink 在界面上显示 URL 链接。在 Vista 下运行正常,但是换到 XP SP2 系统发现网页无法打开。

CHyperLink 是用 ShellExecute(..., L"open", url, ...) 来打开链接的。调试发现是 ShellExecute 执行失败了,返回 5,也就是 ACCESS DENIED(ERROR_ACCESS_DENIED 或 SE_ERR_ACCESSDENIED)。

还好就是发现同样的控件,在另一个程序工作很正常。后来寻找各种原因,最后发现问题是在 CoInitializeEx 这里引起的。将进程初始化的 ::CoInitializeEx(NULL, COINIT_MULTITHREADED) 替换成 ::CoInitialize(NULL),则发现链接打开正常!

当然 WTL 生成的模板对这两者的解释是:

    HRESULT hRes = ::CoInitialize(NULL);
    // If you are running on NT 4.0 or higher you can use the following call instead to
    // make the EXE free threaded. This means that calls come in on a random RPC thread.
    //HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
    ATLASSERT(SUCCEEDED(hRes));


具体有什么鬼窍门也不知道,能工作就 OK 了。
阅读(4244) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-01-13 00:51:42

嗯,UP一下。~