Interface 在多个线程中调用RegisterClassObjects和ResumeClassObjects? 我有一个C++ COM服务器,它使用第三方DLL,它也公开了COM接口。第三方dll很旧(使用Visual Studio 6构建),因此它使用旧的ATL代码。我有这个dll的源代码

Interface 在多个线程中调用RegisterClassObjects和ResumeClassObjects? 我有一个C++ COM服务器,它使用第三方DLL,它也公开了COM接口。第三方dll很旧(使用Visual Studio 6构建),因此它使用旧的ATL代码。我有这个dll的源代码,interface,com,atl,Interface,Com,Atl,我正在使我的应用程序以32位和64位的方式工作,因此我需要更新第三方dll,使其与我的64位应用程序一起运行。当然,旧的ATL代码在最新版本的VisualStudio中不受支持,因此我必须对其进行修改。我基本上做了一个更改-dll中的模块是从旧的CComModule派生的。我把它改成了CAtlExeModuleT。我可以正常工作,这样第三方dll公开的COM接口就可以正常工作,但是现在我的应用程序的COM接口都不可见了 CoreRegisterClassObjects()和CoResumeCla

我正在使我的应用程序以32位和64位的方式工作,因此我需要更新第三方dll,使其与我的64位应用程序一起运行。当然,旧的ATL代码在最新版本的VisualStudio中不受支持,因此我必须对其进行修改。我基本上做了一个更改-dll中的模块是从旧的CComModule派生的。我把它改成了CAtlExeModuleT。我可以正常工作,这样第三方dll公开的COM接口就可以正常工作,但是现在我的应用程序的COM接口都不可见了

CoreRegisterClassObjects()和CoResumeClassObjects()是从第三方dll(在一个线程中)和我的应用程序(在另一个线程中)调用的。我没有收到任何从这些返回的错误…但这是一个有效的场景吗

如果我没有从第三方dll调用CoRegisterClassObjects()和CoResumeClassObjects(),我的应用程序的COM接口是可见的

所以看起来一个隐藏另一个。但是,使用使用VisualStudio6构建的第三方dll,这项功能可以正常工作


是否有任何原因导致只有一组接口可见?

我解决了这个问题。事实证明,ATL的最新版本仍然支持CComModule类。不幸的是,我想不起所有让我改变我使用的类的细节。但是CComModule::Init()方法就是其中之一。它接受第三个可选GUID参数,该参数未传入。也许旧的VisualStudio6ATL代码有另一种获取此值的方法。较新的ATL代码未获取该值。我添加了那个参数,事情又开始运转了