假设您执行以下操作:COM对象是否负责将自己的模块保存在内存中?
1)使用LoadLibrary加载foo.dll。
2)使用GetProcAddress获取指向函数的指针。
3)调用该函数,为您提供对该模块中实现的COM对象的引用。
4)通过调用FreeLibrary来释放foo.dll。
5)调用COM对象上的方法。
你会期望第5步成功,并没有AV?也就是说,COM对象本身负责调用LoadLibrary(再次)来增加Windows为每个模块保留的引用计数,从而确保它不会超过模块?
非常有趣。如果我们说在步骤3中调用的函数名为MyCreateInstance,答案会改变吗?即它是在CoCreateInstance之后建模的?谢谢! – 2009-06-24 23:29:16
否。在上面的“标准”版本中,CoLoadLibrary调用维护对dll的引用 - 只有在安全的情况下才会释放该引用(通过查看对COM服务器中创建的对象的实时引用,或者在你的版本中,你需要确保你自己做到这一点 – 2009-06-24 23:36:31