当没有更多对象引用时,COM是否自动卸载DLL?

Joe*_*Joe 4 c++ vb6 com vbscript scripting

例如,在语言X中:

let x = CreateOject( "MyProgID" )
x.LateBoundCall()
x.Release()  // (or setting x to Nothing in VB-like language, etc)
Run Code Online (Sandbox Code Playgroud)

DLL会发生什么MyProgID?COM是否自动卸载DLL?

编辑

这假设上面的代码是在不暴露任何COM的可执行文件中.

Joh*_*ing 10

是的,但不是以确定的方式.Windows定期询问每个加载的DLL" 现在卸载你是否安全?" 响应"是"的任何DLL都将被卸载.

请注意来自MSDN评论 :

如果通过调用CoGetClassObject加载的DLL无法导出DllCanUnloadNow,则在应用程序调用CoUninitialize函数释放OLE库之前,不会卸载DLL.

请参阅这篇Old New Thing文章.