【发布时间】:2017-03-12 20:25:10
【问题描述】:
COM是否需要初始化才能使用SysAllocString、SysFreeString等BSTR处理函数?
MSDN 说
在调用除 CoGetMalloc 之外的任何库函数之前,您需要在线程上初始化 COM 库
在我看来,BSTR 分配函数使用 IMalloc,因此不需要 COM 初始化?
【问题讨论】:
-
您在哪里看到 BSTR 分配使用 IMalloc?在 MSDN 中,我发现:“自动化可能会缓存为 BSTR 分配的空间。这会加快 SysAllocString/SysFreeString 序列的速度。但是,这也可能导致 IMallocSpy 将泄漏分配给错误的内存用户,因为它不知道由自动化。”我想知道这个缓存过程是否不需要COM初始化。
-
在任何情况下,我看不出您可以通过 not 获得什么好处...
-
我在研究这个问题时在网上某处读到了 IMalloc。好处是我的软件在不同的线程(其中很多)中大量使用了 BSTR,我应该确保它们都调用 Co(Un)Initialize 或者没有必要。
-
我不认为你的“因此”是有根据的。另外,如果要使用这些功能,为什么不进行初始化。
-
@Medinoc,是的,我知道 - 我是说从 C++ POV 来看,
BSTR没有什么特别之处 - 它没有任何行为,因为它只是 Widechar 指针的别名. OP 说他没有在 COM 上下文中使用它们。我的观点是,在不使用 COM 的情况下谈论 COM 要求很奇怪。