gpt4 book ai didi

c++ - 如何从当前运行的进程中释放 SQLServerCE 的 COM 实例?

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:12 25 4
gpt4 key购买 nike

自从我接触 COM 以来已经有一段时间了,所以很好 ;) 这是在带有 SQLServerCE 2.0 的 WindowsCE 5.0 下。

调用它加载 SQLServerCE 2.0 后:-

IDBInitialize *pIDBInitialize = NULL;
CoCreateInstance(CLSID_SQLSERVERCE_2_0, NULL, CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**)&pIDBInitialize);

SSCE20.dll 发生模块加载,这显然将 SQLServerCE 引擎加载到进程空间中。

我不明白的是,如果我在之后立即执行此操作:-

pIDBInitialize->Release();

我没有看到 dll 模块卸载,因此 SSCE20.dll(和 friend )仍然加载到我的进程中。

现在我尝试了 CoFreeUnusedLibraries(),我认为它会强制 COM 清除所有未使用的库,但它似乎并没有起到作用。

在运行时,我希望能够从进程中完全卸载 SQLServerCE 2.0 dll 以简化到 3.5SP1 的升级。

我怀疑这与 Microsoft 在 WindowsCE 下使用的共享 dll 模型有关...但是,我可能错了:)

提前致谢

大卫。

最佳答案

我认为 CoFreeUnusedLibraries 已在更高版本的 Windows(XP 和更高版本,如果我没记错的话)中被删除。也就是说,它什么都不做。

A KB article提到调用函数时的不当延迟,以最大限度地降低一个线程强制卸载另一个正在同时尝试从中创建实例的 DLL 的风险。

可能是他们对延迟卸载不满意(我想它仍然存在可能的竞争条件),并决定完全删除该功能。

您可以尝试调用 CoUninitialize 并查看是否会强制卸载。

关于c++ - 如何从当前运行的进程中释放 SQLServerCE 的 COM 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1830259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com