现有C++应用程序中的BIRT集成
BIRT integration in exsiting C++ application
我希望你做得很好,非常感谢你对我的查询提供的帮助。
我们的系统T3000是用C++编写的(http://www.temcocontrols.com/ftp/software/9TstatSoftware.zip代码在这里可用https://github.com/temcocontrols/T3000_Building_Automation_System)。
我正在尝试将"BIRT报告工具"集成到我的C++应用程序中。我想根据T3000系统中的可用数据创建报告。我认为BIRT是可嵌入的(??)。我们不需要编译和更改项目,只需要能够主要从T3000.exe调用它。我的想法是,我们可以在现有的T3000中放置一个菜单标签,并尝试在用户单击中显示报告。
你能帮我解决"BIRT"的问题吗?我真的很感激你的回答。
问候Raju
答案取决于你对"可嵌入"的定义
BIRT是用纯Java编写的。
我可以想出三种不同的方法:
-
当然,可以将Java代码集成到现有的C/C++程序中(请参阅将Java嵌入C++应用程序?)。
-
您可以使用BIRT运行时引擎,并从命令行将报告生成为PDF或HTML(这意味着,基本上,您可以用几个参数从程序中调用java可执行文件)。请参阅Birt-如何在控制台上运行报告引擎?和http://eclipser-blog.blogspot.de/2008/02/automatic-generation-of-birt-reports.html了解更多信息。
-
您可以在第二个进程中运行像Tomcat这样的Java web服务器,然后通过调用httpURL来启动报告(例如,您可以使用附带的Servlet示例)。看见http://www.eclipse.org/birt/documentation/integrating/viewer-usage.php
-
类似于3。(见下文)
一些注意事项:
由于Java和BIRT引擎的启动开销(这可能需要几秒钟的时间),第二个选项很慢。有了第一个和第三个选项,启动开销可以最小化到只有一次(对于每个报告)。
对于第二个和第三个选项,可能需要修改示例程序的现有代码以满足您的需要。
第一种选择可能是行业质量解决方案的最佳选择,但也是最难开发的。
无论如何,Java技能是必要的IMHO。
如果您计划在SOC而不是PC上运行此功能,请考虑性能。基于Java的解决方案是否非常适合这种硬件?BIRT(对于SOC)需要相当多的RAM和CPU。像Raspi 3这样的硬件应该很容易处理,我认为。
我以第四种方式将BIRT运行时集成到现有的Python应用程序中(所有这些都在应用程序服务器上运行):我编写了一个侦听程序,该程序在TCP套接字上侦听BIRT任务。它使用一个工作进程池(用Java编写),然后使用BIRT报告引擎来生成输出。客户端程序(此处:用Python编写)打开到侦听器的TCP连接,并使用此套接字告诉它要生成哪个报告(包括报告参数和目标文件名)。然后侦听程序依次为任务选择一个工作进程,并将任务交给该工作进程。
所以,基本上,第四个选项与第三个选项相似,有两个区别:
-
通信是基于套接字的(而不是http),允许双向通信。
-
该体系结构是多进程而不是多线程。我们之所以选择这样做,是因为非常大的报告可能会导致内存不足错误,而其他不相关的报告恰好同时运行。这与Oracle为其报表服务器选择的基本体系结构相同。
然而,开发这些程序花了几个月的时间。
HVB:我要对你的上述解释表示感谢,我相信这些信息会为我们节省时间。Raju将在我们深入了解该项目后分享我们的经验,以便其他人能够受益。
- 将公共但非静态的成员函数与ALGLIB集成
- 将IBM Rhapsody模型集成到VS 2019中
- 从R调用C++函数并对其进行集成时出错
- 如何集成 HID USB 控制器?
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- 将Qt集成到现有的VS项目中以取代WinAPI
- 将 Crashpad 与 Windows Qt 应用程序集成
- Python3.6 模板中的 CGAL C++ 集成错误
- 基本 Cuda C++项目集成问题
- 如何使用CMake将QtMultimedia组件集成到项目中?
- 在 Mac OS 中将 QT 与 CMAKE 集成
- 使用 GSL 库制作样条曲线并使用它们进行集成
- 在集成终端上运行vscode lldb调试器时,如何获取程序的输出?
- 将Emscripten集成到Clion中
- VIsual Studio:避免控制台弹出,而是将其集成到IDE中
- 如何在electrolon项目中集成qt原生窗口
- 与 boost odeint 集成期间的析构函数调用
- C++uWebSockets将事件循环集成到一个线程中
- C++ 项目在 Jenkins 中的持续集成
- 现有C++应用程序中的BIRT集成