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

插件API设计

如何解决《插件API设计》经验,为你挑选了0个好方法。

所以我的应用程序主要基于使用QPlugin系统的QT API.它使用起来相当简单,你定义了一个从接口继承的类,当加载插件时,你得到一个该类的实例.最后,它将归结为dlopen/ dlsymLoadLibrary/ GetProcAddress,适用于操作系统的任何内容.我没有问题,一切都按预期工作.

所以,关于这个问题.有许多功能涉及插件需要引用主应用程序提供的数据/功能.例如,我的应用程序有一个GUI,所以我在我的应用程序中有一个" plugin::v1::gui"函数返回一个QWidget *.如果我想要一个插件能够将内容添加到我的UI中,或者甚至让它的对话框成为我的UI的子对象,它将需要一个指向它的指针.

我在Linux上开始开发并很快遇到这样一个事实:默认情况下,加载器不会在加载它的应用程序中填充共享对象中未解析的符号.没问题,容易解决.-rdynamic在我的旗帜上添加" "并继续前进.工作得很好.

现在我发现在Windows上似乎没有相应的东西:(.那么什么是一个好的解决方案?

到目前为止,我提出的最好的方法是在我的主应用程序中填充一个结构,该结构包含指向插件可能关心的每个对象/函数的指针.然后将它传递给插件的" init()"函数,现在它有适当的指针指向所有内容,但这是一个烦人的解决方案,因为现在我必须在多个地方进行更改,每当我添加一些东西.

有更好的解决方案吗?SO社区如何处理这个问题?

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