【问题标题】:ATL & COM - Multiple servers, one binary?ATL & COM - 多个服务器,一个二进制文件?
【发布时间】:2011-06-24 06:36:27
【问题描述】:

我有两个 COM DLL。两者都实现了 ATL::CAtlDllModuleT。据我了解,这个类完成了注册和注销 COM 对象的繁琐工作。有没有办法将这两者合二为一?

class CFoo : public ATL::CAtlDllModuleT< CFoo >
{
public :
    DECLARE_LIBID(LIBID_FooLib)
    DECLARE_REGISTRY_APPID_RESOURCEID(IDR_FOOINTERFACE, "{4E6823F7-230B-4D6C-9195-571B94B32859}")
};

我有两个项目,一个是 DLL,另一个是 LIB(链接到其中)。

【问题讨论】:

    标签: c++ visual-studio com atl


    【解决方案1】:

    请参阅OBJECT_ENTRY_AUTO 宏,该宏在 clsid 和您的实现对象之间创建链接,为类的注册、初始化和创建提供支持。您只需将宏用于该 exe/dll 中所需的每个 clsid。

    【讨论】:

    • 就这样?对 COM 来说似乎有点太容易了。
    • 哦,我敢肯定会有其他的地狱来帮助平衡这看起来很容易。但这就是我的经验。
    • +1 @user318811:这应该足够了——你只需使用那个(或其他等效的)宏来告诉 ATL“我想公开这个类来注册”,如果你有一个类型库,你必须也提到它。这些宏填充了在调用DllRegisterServer() 时需要注册的全局映射。也许有些东西会坏掉,但 ATL 附带了源代码,所以你可以很容易地调试这些问题。
    猜你喜欢
    • 2010-12-17
    • 2011-11-10
    • 1970-01-01
    • 2011-06-26
    • 2013-02-05
    • 2011-06-23
    • 2013-01-26
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多