对于 C++ 插件系统来说什么是安全的?

2024-03-07

C++ 中的插件系统很困难,因为 ABI 没有正确定义,并且每个编译器(或其版本)都遵循自己的规则。然而,Windows 上的 COM 表明创建一个最小的插件系统是可能的,该系统允许具有不同编译器的程序员使用简单的接口为主机应用程序创建插件。

让我们实际一点,先把 C++ 标准放在一边,它在这方面没有多大帮助。如果我想为 Windows 和 Mac(以及可选的 Linux)编写一个支持 C++ 插件的应用程序,并且如果我想为插件作者提供相当大的编译器选择(例如不到 2 年的 Visual C++ 版本) 、GCC 或英特尔的 C++ 编译器),我可以依赖 C++ 的哪些功能?

当然,我假设插件是针对特定平台编写的。

在我的脑海中,以下是我能想到的一些 C++ 功能,以及我认为的答案:

  • vtable布局,通过抽象类使用对象? (是的)
  • 内置类型、指针? (是的)
  • 结构体、联合体? (是的)
  • 例外情况? (不)
  • 外部“C”函数? (是的)
  • 具有内置参数类型的 stdcall 非外部“C”函数? (是的)
  • 具有用户定义参数类型的非 stdcall 非外部“C”函数? (不)

如果您能分享该领域的任何经验,我将不胜感激。如果您知道任何具有 C++ 插件系统的相当成功的应用程序,那也很酷。

Carl


多布博士的日记有一篇文章构建您自己的插件框架:第 1 部分 http://www.ddj.com/cpp/204202899?cid=RSSfeed_DDJ_Cpp这是关于这个主题的很好的读物。这是一系列文章的开始,该系列文章涵盖了 C/C++ 跨平台插件框架的体系结构、开发和部署。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于 C++ 插件系统来说什么是安全的? 的相关文章

随机推荐

  • 是否可以在弹性布局中定位每行的第一个和最后一个元素?

    给定 Flex 布局中的缩略图列表 如果 Flex 容器具有可变宽度 是否可以仅使用 CSS 来定位每行的第一个和最后一个元素 thumbnails display flex margin 0 padding 0 list style ty
  • 账户与azure AD关联后如何从Alexa获取accesstoken

    我尝试将 Alexa AWS Lambda 函数 node js 6 10 与 Azure Active Directory 连接到我的 Azure Cloud API 读完后文档 https developer amazon com do
  • 部署后出现 Angular 的“未捕获错误:[$injector:unpr]”

    我有一个相当简单的 Angular 应用程序 它在我的开发机器上运行得很好 但在部署它后失败并显示此错误消息 在浏览器控制台中 Uncaught Error injector unpr http errors angularjs org u
  • 带 ref/Pointer 参数的 C# 反射调用方法

    我想通过反射调用类的每个方法 但无法使用指针作为引用来调用方法 通常我可以为我找到的每个指针传递 null 一切都会好起来的 问题是当函数尝试访问我传递的指针时 该指针将是对内存地址 0 的引用 这显然对我的程序来说会立即崩溃 所以我需要传
  • Spring 集成 TCP

    我想设置 Spring TCP 服务器客户端应用程序 我需要一个服务器侦听端口上的传入消息 例如 6666 并且客户端在不同的端口上发送消息 例如 7777 我已遵循文档 http docs spring io spring integra
  • 在 cocoa/iPhone 中将纪元时间转换为 NSDate

    我有纪元时间的值 比如 123456789 现在我想将其转换为NSDate在可可框架中 谁能告诉我吗 thanks 文档 http developer apple com iphone library documentation Cocoa
  • 使用 Firestore,如何使用 java 类序列化文档中的引用类型字段?

    如果我有一个包含 引用 类型字段的 Firestore 文档 那么在使用自动 POJO Java 对象序列化时如何读取和写入该字段 POJO 类型字段文档参考 https firebase google com docs reference
  • WPF 相当于 TextRenderer

    我用过TextRenderer测量字符串的长度 从而适当调整控件的大小 WPF 中是否有等效项或者我可以简单地使用TextRendered MeasureString 谢谢纪修 阅读您的链接后 我想到了以下两个内容 它们都适合我
  • Python将整列添加到csv文件中,而不读取文件内容

    我需要使用 Python 将列添加到 csv 文件 我能想到的唯一方法是读取整个文件 编辑每一行以添加 1 个元素 然后再次写入文件 然而 我真的不想这样做 因为文件的大小 超过 32000 行 每次我想添加列时似乎需要大量的读写 即使使用
  • 如何从 fgets 中检测空字符串

    我试图将 stdin 中的 fgets 输入检测为空 当我按 Enter 键而不输入任何内容时 这是我的程序 int main char input 1000 printf Enter fgets input 1000 stdin inpu
  • 如何使用 box2d 在 libgdx 中拖动对象?

    我已将对象添加到box2d世界在libgdx 我想知道是否可以用鼠标拖动对象 如果是这样 怎么办 thanks 这里有几个选项 您可以使用鼠标关节 也可以使用运动体并手动设置其位置 看看如何使用鼠标关节的一个很好的例子 http code
  • 图像作为绘制形状的“背景”

    是否可以使用图像而不是颜色来 填充 HTML5 画布上的形状 我画了一堆形状 各个角以 45 度角切掉的正方形 我希望能够用图像而不是颜色来 填充 这些形状 目前我有一行指出 context fillStyle 123456 example
  • 如何使用 Meteor.js、Twitter 和 Oauth 发布推文

    我在使用 Meteor 和 Twitter 时遇到了一些问题 我想做的就是通过点击按钮发布一条推文 为此 我必须通过 Oauth 向 Twitter 服务验证自己的身份 目前 我正在以一种非常复杂的方式进行身份验证 从客户端到服务器并返回
  • 适用于 Android 的本机 OpenCV 示例抛出 UnsatisfiedLinkError

    我尝试在模拟器上运行 opencv android 示例 带有本机代码的示例 例如示例 教程 2 高级 1 添加本机 OpenCV 失败 我有一个Win7 x86系统 我可以构建本机库 但如果运行示例 我总是会遇到以下异常 10 04 08
  • 每个线程组的概率

    如果我的测试计划中有 3 个线程组 如何为每个组设置恒定概率 请求权重 我是 JMeter 的新手 您能在屏幕截图上显示您的设置吗 只需将每组的线程数设置为测试总线程数的一个因子即可 如果有 100 个 VU 则 g1 设置为 50 g2
  • 我如何使用 iOS 中的 Fabric 框架从我的应用程序中注销 Twitter

    在我的 iOS 应用程序中 我使用集成 Twitter 登录织物框架 TWTR作曲家 第一次登录并在 Twitter 上发布推文时 它工作正常 但我无法在我的应用程序中从 Twitter 注销 当我第二次尝试登录时 twitterlogin
  • LINQ 和递归

    考虑以下 public class Box public BoxSize Size get set public IEnumerable
  • 无法在 django 模板中使用 unicode 字符串

    我在 django 模板中使用了 B M N TO N 字符串 它引发了错误 utf8 编解码器无法解码位置 569 中的字节 0xd4 无效的连续字节 但是当我使用 BO MON TOAN 字符串时 它不会引发错误 所以 我在模板中使用了
  • 红宝石:能被4整除

    这工作正常 但我想让它更漂亮 并容纳所有能被 4 整除的值 if i 4 i 8 i 12 i 16 i 20 i 24 i 28 i 32 end 有什么聪明 简短的方法可以做到这一点吗 尝试这个 if i 4 0 这被称为 模运算符 h
  • 对于 C++ 插件系统来说什么是安全的?

    C 中的插件系统很困难 因为 ABI 没有正确定义 并且每个编译器 或其版本 都遵循自己的规则 然而 Windows 上的 COM 表明创建一个最小的插件系统是可能的 该系统允许具有不同编译器的程序员使用简单的接口为主机应用程序创建插件 让