当前位置:  开发笔记 > 编程语言 > 正文

什么对C++插件系统安全?

如何解决《什么对C++插件系统安全?》经验,为你挑选了3个好方法。

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

让我们变得实用,并且在这方面保留C++标准,除了一分钟之外.如果我想为支持C++插件的Windows和Mac(以及可选的Linux)编写应用程序,并且我想为插件作者提供相当多的编译器选择(比如说不到2年的Visual C++版本) ,GCC或英特尔的C++编译器),我可以依靠C++的哪些特性?

当然,我认为插件是针对特定平台编写的.

在我的脑海中,这里有一些我能想到的C++特性,我认为答案是:

vtable布局,通过抽象类使用对象?(是)

内置类型,指针?(是)

结构,工会?(是)

异常?(没有)

外部"C"功能?(是)

带有内置参数类型的stdcall非外部"C"函数?(是)

非stdcall非外部"C"函数与用户定义的参数类型?(没有)

我很感激您在该领域的任何经验,您可以分享.如果您知道任何具有C++插件系统的中等成功应用程序,那也很酷.

卡尔



1> Serge..:

Dobb博士的期刊有一篇文章构建自己的插件框架:第1部分,这是一个非常好的阅读主题.它是一系列文章的开始,这些文章涵盖了C/C++跨平台插件框架的体系结构,开发和部署.


如果您使"Here"链接更具描述性,那么这个答案会更好.现在,你无法告诉你要链接什么.

2> Konrad Rudol..:

您可能还想考虑用脚本接口替换传统的插件接口.对于已经解决了您的问题的C/C++中的几种脚本语言,有一些非常好的绑定.在它们之上构建可能不是一个坏主意.例如,看看Boost.Python.


就是说,在某些情况下,脚本编写还远远不够-尤其是如果您想允许具有访问操作系统权限的插件。

3> KeyserSoze..:

Qt有一个非常好的插件系统,我过去曾经使用过.它使用Qt的元对象系统来克服在尝试开发C++插件时通常会遇到的许多问题.

一个例子是如何Q_DECLARE_INTERFACE工作,以防止您使用不兼容的插件.另一个是构建密钥,以确保为您的体系结构,操作系统,编译器加载正确的插件.如果您不使用Qt的插件系统,那么您需要担心这些并自行创建解决方案.这不一定是火箭科学,我并不是说你失败了,但奇趣科技的人非常聪明并且花了一段时间思考它,我宁愿使用他们创造的东西而不是自己重新发明轮子.

另一个例子是RTTI通常不能跨DLL边界工作,但是当使用Qt时,依赖于元对象系统的qobject_cast之类的东西在DLL边界上工作.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有