标签:

进阶

在前面的章节中,我们详细讨论了 C++ 二进制兼容性的困难。然后,我们引入了插件框架的设计和实现,讨论了插件的生命周期、跨平台开发的注意事项以及如何根据业务模型设计基于插件的系统等等。下面,我们将讨论如何使插件通过 C 接口与应用程序交互,同时还能允许开发者使用 C++ 接口开发插件。最后,我们将开始 RPG 游戏的编码,同样会基于这个插件模型。我们将介绍游戏的概念、如何以及为什么这么设计接口,最 ...

0 评论 2.2K 次阅读

ActorInfoContainer用于管理ActorInfo对象集合。它实现了 C++ 接口IActorInfoIterator,在其内部保存集合索引。当调用 next() 的时候,返回该索引位置的对象;如果索引大于集合元素数目,则返回 NULL。当调用reset()时,则将索引置 0。当然,索引的初始化为 0。

0 评论 2.2K 次阅读

错误处理 错误处理在基于插件的 C++ 系统中与普通系统有所不同。你不能简单的在插件中抛出异常,然后由应用程序去处理它们。这是因为我们前面讨论过的二进制兼容的问题。如果插件使用与编译系统的同样的编译器编译,这种实现还可能正常。但是,你不能强制插件开发者使用与你一样的编译器。你可以使用 C 风格的返回错误码,但是这不符合我们的 C++ 插件框架的设计理念。插件框架的主要设计目标之一就是,允许插件开发 ...

0 评论 2.2K 次阅读

本章节将开始讨论如何开发跨平台的 C++ 插件。 跨平台开发 C/C++ 的跨平台开发相当复杂:数据类型不同,编译器不同,操作系统 API 也不同。跨平台开发关键是封装平台差异性,让你的应用程序仅关注于业务逻辑。如果应用程序使用了与平台相关的代码,我们就需要添加很多#ifdef OS_THIS或者#ifdef OS_THAT这样的宏。这是你必须注意的。解决跨平台问题的一个最佳实践是,将平台相关代码 ...

0 评论 2.2K 次阅读

插件系统组件 本章节主要描述通用插件框架的主组件及其作用。 DynamicLibrary DynamicLibrary组件是一个简单的跨平台 C++ 类。它使用 dlopen/dlclose/dlsym 系统调用(UNIX 以及 OS X)和 LoadLibrary/FreeLibrary/GetProcAddress API 调用(Windows)。

0 评论 2.1K 次阅读

利用语言特性改进代码

by 豆子

也许这个标题有点大,但是我是想利用这篇文章来强调一个事实:设计模式不是一层不变的,它需要根据具体问题、具体语言做出具体的实现。设计模式看起来是一种代码模板,但实际并不是。也许有人说,最好的设计模式就是没有模式,这句话其实也算是说到了点子上。所谓设计模式,其实就是能够让我们的代码能够更好的工作——运行起来,或者是让别的开发者更方便使用。

0 评论 2.1K 次阅读

注册对象 现在,球已经在插件手上了(在PF_initPlugin中)。如果版本正确,插件管理器应当已经注册了所有支持的对象类型。注册的目的是提供类似PF_CreateFunc和PF_DestroyFunc这样的函数,以便以后用于创建和销毁插件对象。这种安排允许插件自己控制所管理对象的实际创建和销毁操作,包括资源管理等(如内存),而由应用程序控制所有的对象及其生命周期。当然,插件也可能使用单例模式, ...

0 评论 2.3K 次阅读

在前面的文章中,我们讨论了问题的细节、多种解决方案,最后大体引入了插件框架。下面,我们将继续架构的描述、插件生命周期的管理以及插件框架的具体实现细节。注意,我们的代码可能仅仅是接口层次的,不会涉及更深入的实现。 基于插件系统的架构 基于插件的系统可以分成三个部分,这三个部分都是松散耦合的:使用其对象模型的主系统或主应用程序,插件管理器和插件。插件需要符合插件管理器的接口和协议,并且需要实现对象模型 ...

0 评论 2.2K 次阅读

编程语言的支持 在前面的章节中,我们已经了解到,如果你能够使用编译器令应用程序和插件的虚表匹配,那么就可以保持 C++ 虚表级别的兼容性;或者你可以使用 C 级别的兼容性,然后就能使用不用的编译器去构建系统,但其限制在于你只能编写纯 C 应用。这样的话,你就不能够使用前面我们在例子 IActor 中看到的那种优雅的 C++ 接口。

0 评论 2.1K 次阅读

插件编程接口 所谓插件,其实就是基于接口的设计。基于插件的系统最基本的一点就是,要有一个中心系统,用于加载未知的插件,并且能够使用预先定义好的接口和协议与这些插件进行交互。 最基本的方式是定义一个接口,提供一系列插件(动态的或者是静态)需要暴露出的函数。这种实现从技术上说是可行的,但实际并不那么简单地操作。原因在于,一个插件需要支持两类接口,但是却只能暴露出一个接口的函数集。这意味着,两类接口必须 ...

0 评论 2.3K 次阅读

关于我

devbean

devbean

豆子,生于山东,定居南京。毕业于山东大学软件工程专业。软件工程师,主要关注于 Qt、Angular 等界面技术。

主题 Salodad 由 PenciDesign 提供 | 静态文件存储由又拍云存储提供 | 苏ICP备13027999号-2