繁体   English   中英

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

[英]How do I free SQLServerCE's COM instance from the current running process?

自从我接触COM以来已经有一段时间了,所以要好;)这是在WindowsCE 5.0和SQLServerCE 2.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(和朋友)仍然加载到了我的进程中。

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

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

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

提前致谢,

大卫。

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

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

可能是他们对延迟的卸载不满意(我想它仍然会出现竞争情况),并决定完全删除该功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM