gpt4 book ai didi

c++ - 自定义 COM 实现?

转载 作者:可可西里 更新时间:2023-11-01 16:28:00 25 4
gpt4 key购买 nike

我希望在 UNIX 类型平台上用 C++ 实现 COM 的自定义实现,以允许我动态加载和链接面向对象的代码。我认为这将基于 POSIX 提供的一组类似的功能来加载和调用 dll,即 dlopen、dlsym 和 dlclose。

我理解 COM 的一般思想是您链接到一个公共(public) dll (Kernel32.dll) 中的几个函数,即 QueryInterface、AddRef 和 Release,然后允许您访问接口(interface),这些接口(interface)只是封装的函数指针表带有指向应该调用函数指针的对象的指针。这些函数通过 IUnknown 公开,您必须从中继承。

那么这一切是如何运作的呢?有没有更好的方法来动态链接和加载到面向对象的代码?从 dll 继承如何工作 - 是否每次调用基类都必须是公开的成员函数,即 private/protected/public 被简单地忽略?

我非常精通 C++ 和模板元编程,并且已经拥有一个完全反射的 C++ 系统,即成员属性、成员函数和使用 boost 的全局/静态函数。

最佳答案

有几点需要注意:

  • COM 的强大功能主要来自 IDL 和 midl 编译器。它允许使用为您生成的所有 C/C++ 样板文件对对象和接口(interface)进行非常简洁的定义。

  • COM 注册。在 Windows 上,类 ID (CLSID) 记录在与可执行文件关联的注册表中。您必须在 UNIX 环境中提供类似的功能。

  • 整个 IUnknown 实现相当简单,除了 QueryInterface,它在 C 中实现时有效(即没有 RTTI)。

  • COM 的另一个完整方面是 IDispatch - 即后期绑定(bind)方法调用和发现(只读反射)。

看看XPCOM因为它是一个类似 COM 的多平台环境。这确实是您最好利用其他技术的事情之一。它可以占用大量本应花在其他地方的时间。

关于c++ - 自定义 COM 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com