首页 / 知识
关于api:什么是C插件系统安全?
2023-04-14 04:16:00

What's safe for a C++ plug-in system?C中的
插入系统很困难,因为ABI定义不正确,并且每个编译器(或其版本)都遵循其自己的规则。但是,Windows上的COM显示可以创建一个最小的插件系统,该系统允许具有不同编译器的程序员使用简单的界面为主机应用程序创建插件。 让我们切合实际,将C标准(在这方面不是很有帮助)搁置一分钟。如果我想为Windows和Mac(以及可选的Linux)编写一个支持C插件的应用程序,并且如果我想给插件作者提供相当多的编译器选择(例如,不到2年的Visual C版本) ,GCC或Intel的C编译器),我可以指望C的哪些功能? 当然,我假设插件将针对特定平台编写。 在我脑海中,下面是一些我能想到的C功能,我认为是答案:
对于您在该领域可以分享的任何经验,我将不胜感激。如果您知道有任何具有C插件系统的中等成功的应用程序,那也很酷。 卡尔 Dobb博士的日记中有一篇文章"构建您自己的插件框架:第1部分",这是关于该主题的不错的阅读。这是一系列文章的开头,涵盖了C / C跨平台插件框架的体系结构,开发和部署。 Qt有一个非常好的系统,用于我过去使用的插件。它使用Qt的元对象系统来克服尝试开发C插件时通常会发现的许多问题。 一个示例是 另一个例子是RTTI通常无法跨DLL边界工作,但是当使用Qt时,依赖于元对象系统的qobject_cast之类的东西确实可以跨DLL边界工作。 您可能还需要考虑用脚本接口替换传统的插件接口。对于C / C中的几种脚本语言,有一些非常好的绑定已经解决了您的问题。在它们之上进行构建可能不是一个坏主意。例如,看一下Boost.Python。 马修·威尔逊(Matthew Wilson)撰写的《 Imperfect C》一书对此有很好的信息。 其中的建议似乎是:只要使用相同(或等效)编译器,就可以使用C,否则最好将C用作C代码之上的接口。 我认为您可以安全地基于以下内容创建插件系统:
可能是最成功的C插件系统:很好的旧Adobe Photoshop。如果不是那样,则是虚拟合成格式之一,例如VSTi等。 Firefox在XPCOM(http://www.mozilla.org/projects/xpcom/)上运行。它受Microsoft COM的启发,但是它是多平台的。 ACE具有跨平台插件体系结构。 签出: 我建议您检查一下这本书 我有一个带有C插件系统的游戏引擎。 我在头文件中有一些代码,因此将其放入插件的编译单元中。 驻留在主机中的较大函数通过导出的C函数进行调用(插件调用MyObject_somefunction(MyObject * obj),而在引擎中仅调用obj-> somefunction())。如果根据您的喜好调用C函数很丑陋,那么在将标头包含在插件中的情况下,使用一些标头技巧,将成员函数#defined定义为调用C函数:
虚拟函数要么必须是纯函数,要么代码位于头文件中。如果我不是从类继承而只是实例化一个,则虚拟函数代码可以存在于引擎中,但是该类必须导出一些C函数以创建和销毁从插件调用的对象。 基本上,我使用的窍门旨在维持总体平台独立性,仅相当于C导出和头文件窍门。 |
最新内容
相关内容
linux中ps命令显示?
linux中ps命令显示?,系统,信息,状态,进程,命令,多地,软件,工作,基础,报告,linux命令大全之ps命令详解1、su:用户切换 格式:su [选项] [使用者]linux命令逐页显示?
linux命令逐页显示?,系统,工作,地址,命令,网上,信息,百度,基础,标准,内容,在linux里有些命令显示的内容太多了,要网上翻页,怎么办?用shift+paglinux系统中管道命令?
linux系统中管道命令?,标准,系统,工作,命令,信息,通讯,管道,流向,连续,工具,Linux第二章-Linux常用命令1、linux常用命令有pwd命令、cd命令、llinux系统命令记不住?
linux系统命令记不住?,系统,工作,基础,地址,网络,服务,命令,第一,名称,目录,学LINUX基础命令总是记不住怎么办?1、按命令的单词意义来记忆是最linux命令安装新系统?
linux命令安装新系统?,系统,软件,工作,管理,在线,电脑,信息,基础,发行,数据,Linux安装基本命令1、linux系统常用操作命令linux系统常用操作命linux中显示路径命令?
linux中显示路径命令?,系统,地址,工作,信息,时间,命令,数据,网络,路径,名字,linux系统常用操作命令1、linux常用命令有pwd命令、cd命令、ls命linux系统的命令字?
linux系统的命令字?,地址,系统,工作,管理,信息,命令,目录,情况,发行,设备,请问linux操作系统的命令是什么1、linux命令是对Linux系统进行管理linux系统的命令格式?
linux系统的命令格式?,系统,管理,地址,工作,命令,信息,目录,情况,网络,操作,Linux常用系统管理命令1、linux常用命令有pwd命令、cd命令、ls命linux命令多显示几行?
linux命令多显示几行?,实时,系统,标准,数据,档案,命令,文件,最新,信息,状态,linux取出某几行?在linux系统中,从文件中查找包含某关键字的内容,可linux系统用户组命令?
linux系统用户组命令?,系统,管理,密码,代码,用户组,用户,命令,邮箱,电脑,名称,Linux命令之用户组管理在Linux中,用户组是一种将一组用户聚合在查看系统linux命令行?
查看系统linux命令行?,系统,信息,情况,地址,第一,实时,命令,环境,状态,数据,如何查看linux系统CPU信息这里我先介绍一个文件。它就是/proc目录linux命令行显示键值?
linux命令行显示键值?,系统,环境,管理,文化,国家,信息,工具,数据,软件,项目,Linux深入探索16-区域设置:locale1、locale 命令是 Linux 系统中