COM & CoGetClassObject()

Pom*_*dou 4 c++ com

我有一个小问题CoGetClassObject()

我有一个应用程序,它必须使用某些特定版本的 DLL,但它们也存在于系统中,以更新的版本存在。

所以我开始使用CoCreateInstance()and loadLibrary(),我想这很好。问题是加载了两个版本的DLL。

所以我认为这CoGetClassObject()是问题/解决方案,因为它提供了一个指向与包含应用程序必须在旧版本中使用的 DLL 的 CLSID 关联的对象的接口的指针。

但我不知道这个函数“做什么”,那么我怎样才能“覆盖”这个函数?

谢谢。

PS:我是 COM 编程的新手。

Han*_*ant 5

CoGetClassObject() 只完成了 CoCreateInstance() 的一半工作。它返回一个类工厂。CoCreateInstance() 然后调用 IClassFactory::CreateInstance() 并释放 IClassFactory。只有在需要创建某个 coclass 的多个对象并希望对其进行优化时,才可以使用它。它避免了一遍又一遍地创建和发布工厂的成本。

您可能忽略了这个问题的一个简单得多的解决方案。您可以简单地将新版本的 COM 服务器 DLL 复制到与客户端 EXE 相同的目录中。并创建一个名为“app.exe.local”的零字节文件,其中“app”是 EXE 的名称。这足以强制加载复制的 DLL 而不是注册表指向的那个。关于 DLL 重定向的 MSDN 库文章在这里