加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – SysAllocString / SysFreeString COM函数需要调用CoI

发布时间:2020-12-14 05:38:49 所属栏目:Windows 来源:网络整理
导读:是否需要初始化COM才能使用SysAllocString,SysFreeString和其他BSTR处理函数? MSDN说 You need to initialize the COM library on a thread before you call any of the library functions except CoGetMalloc 在我看来,BSTR分配函数使用IMalloc,因此不需要
是否需要初始化COM才能使用SysAllocString,SysFreeString和其他BSTR处理函数?

MSDN说

You need to initialize the COM library on a thread before you call any of the library functions except CoGetMalloc

在我看来,BSTR分配函数使用IMalloc,因此不需要COM init?

解决方法

我找不到官方文档,说你可以在不初始化COM的情况下调用这些函数,但是我可以带你去记忆里行进一些可爱的观察.

因为Windows 95在具有4 MB RAM的计算机上运行,??所以Explorer很难尝试不加载ole32.dll.事实上,shell团队编写了自己的迷你版本的COM,编写shell扩展的人应该只调用SH *函数,而不是Co *函数,以避免在可能的情况下加载真正的COM / OLE内容.

This blog post表示mini-COM在Windows XP及更高版本中已经100%消失,但我不确定它在理论上可以在多大程度上使shell处于mini-COM模式.

当您意识到Windows 2000具有名为IShellFolder2的shell接口并且其中一个方法(GetDetailsEx)返回VARIANT时,事情变得有趣.而且VARIANT可以包含BSTR! IColumnProvider :: GetItemData也返回VARIANT.

有了这些信息,您可以推断Windows 2000可以在不必调用CoInitialize的情况下分配BSTR,只需调用SHGetDesktopFolder获取IShellFolder并请求以字符串形式返回的属性.

然而,这里有两个未知数:

> Windows 2000是否可以使用mini-COM?
>如果必须返回一个字符串,shell32.dll中的IShellFolder2实现是否会初始化真正的COM?

我知道当资源管理器窗口处于详细模式时(或者如果它需要工具提示?),IShellFolder2和IColumnProvider都会参与其中,因此shell似乎不太愿意为此加载真正的COM.

即使我能确认所有这一切也不会对你有所帮助,因为我认为你的主要目标不是Windows 2000.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读