我正在用 Qt 编写一个我想用插件扩展的应用程序。我的应用程序还有一个插件将使用的库。所以,我需要一种双向沟通。基本上,插件可以调用库,加载插件的应用程序将调用它们。
现在,我的库是用 C++ 编写的,所以它有一些类。插件可以包含头文件,链接到它并使用它。我的接口也有一个头文件,它是插件必须实现的抽象基类。他们还应该导出一个函数,该函数将返回指向该类的指针,并使用 C 链接。
至此我相信一切都清楚了,一个标准的插件界面。但是,有 3 个主要问题或子任务:
如何使用其他语言的库?我只用 Python 试过这个。我使用 SIP 生成了一个 Python 组件,该组件已成功导入到 test.py 文件中,并从库中的一个类中调用了函数。我没有尝试过任何其他语言。
如何为其他语言的抽象类生成适当的声明或存根?由于插件必须实现这个类,我应该能够以某种方式生成与其他语言中的标头等效的内容,例如 Python 的 .py 文件、Java 的 .class 文件等。我还没有尝试过,但我假设有其他语言的生成器。
我将如何在插件中创建对象的实例?如果我到了这一点,该类将在插件中实现。现在我需要调用返回已实现抽象类实例的函数,并获取指向它的指针。根据我的研究,为了完成这项工作,我必须获得 Python 解释器、JVM 等的句柄,然后从那里与插件进行通信。
它看起来并不太复杂,但是当我开始研究时,即使是最简单的案例也需要大量的工作。我成功地只达到了第一点,而且只在 Python 中。这让我想知道我是否采取了正确的方法?你对此有什么想法..也许我不应该在我的库和抽象基类中使用 Qt,而只使用纯 C++。它可能会使事情变得更容易一些。或者也许我应该在我的库中只使用 C,并让插件返回一个 C 结构而不是一个类。我相信这会使事情变得更容易,因为调用图书馆将是一件微不足道的事情。而且我相信 C 结构的实现会比实现 C++ 类容易得多,甚至比实现使用 Qt 对象的 C++ 类更容易。
请指出我正确的方向,并分享您在这方面的专业知识。另外,如果您知道任何有关该主题的书籍,我将非常乐意购买。或者一些处理这个的链接会做。