我希望你做得很好,我非常感谢你的帮助,我的查询。
我们的系统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' ?我非常感谢你的回答。
此致 拉朱
答案 0 :(得分:1)
嗯,答案取决于你对“嵌入式”的定义。
BIRT是用纯Java编写的。
我可以想到3种不同的方式:
当然可以将Java代码集成到现有的C / C ++程序中(参见Embed Java into a C++ application?)。
您可以使用BIRT运行时引擎并从命令行生成PDF或HTML报告(这意味着,基本上您可以使用多个参数从程序中调用java可执行文件)。有关详情,请参阅Birt - How to run report engine on the console?和http://eclipser-blog.blogspot.de/2008/02/automatic-generation-of-birt-reports.html。
您可以在第二个过程中运行类似Tomcat的Java Web服务器,然后通过调用http URL启动您的报告(例如,您可以使用包含的Servlet示例)。请参阅http://www.eclipse.org/birt/documentation/integrating/viewer-usage.php
类似于3.(见下文)
一些注意事项:
第二个选项很慢,因为Java和BIRT引擎启动开销(这可能需要几秒钟)。使用第一个和第三个选项,启动开销是或者可以最小化到一次(并且对于每个报告)。
对于第二个和第三个选项,可能需要修改示例程序的现有代码以满足您的需要。
第一种选择可能是行业质量解决方案的最佳选择,但它也是最难开发的。
无论如何,Java技能是必要的恕我直言。
如果您打算在SOC而不是PC上运行此功能,请考虑性能。 基于Java的解决方案是否非常适合这种硬件? BIRT需要相当多的RAM和CPU(用于SOC)。像Raspi 3这样的硬件应该很容易处理,我想。
我以第四种方式将BIRT运行时集成到现有的Python应用程序(所有这些在应用程序服务器上运行):我编写了一个监听程序,该程序监听TCP套接字上的BIRT任务。它使用一个工作进程池(用Java编写),后者又使用BIRT报告引擎生成输出。客户端程序(此处:用Python编写)打开与侦听器的TCP连接,并使用此套接字告诉它生成哪个报告(包括报告参数和目标文件名)。然后,监听程序依次为任务选择一个工作进程,并将该任务提供给工作进程。
所以,基本上,这第四个选项与第三个选项类似,有两个不同之处:
通信是基于套接字的(而不是http),允许进行双向通信。
架构是多进程而不是多线程。我们之所以选择这个,是因为非常大的报告可能会导致内存错误,因为其他不相关的报告恰好同时运行。它与Oracle为其报告服务器选择的基本架构相同。
然而,开发这些课程需要数月时间。
答案 1 :(得分:0)
HVB:我必须给你的不仅仅是上面的解释,这个信息将节省我们确定的时间。 Raju将在我们深入项目之后分享我们的经验,以便其他人可以受益。