好的,标题有点令人困惑。
我拥有的:我有一个我无法修改的程序M.我只能在其中编写脚本并添加对共享对象(DLL)的访问权。
现在我想用M中的数据做一些疯狂的事情。脚本lnaguage不足以满足我的需求,我不想做DLL中的所有事情(C(++)的经验不多,... )。
我的想法是创建一个DLL(让我们称之为B桥接)插入M中的一些粘合代码。现在用户应用程序A(在我的情况下用java编写)应该连接到B.现在交互应该可以将M与A通过B连接。
我只是试图在linux下的示例系统中对这些事情进行思考。在这里我遇到了问题,图书馆不分享所需的信息。
我要测试两个名为J1和J2的java实例。 J1在SO中注册了一个回调函数。从J1(J1 - > SO - > J1)触发回调一切正常。试图通过J2触发不起作用:似乎J1没有注册。相反,J2得到了注册。 (见消息来源)
在网上看后我发现:
图书馆测试代码:http://pastebin.com/bFUbwE68
Java代码:http://pastebin.com/zpecisVN
如何将数据从M转换为A以及从A到M的某些数据(M的频繁轮询是否正常)?
编辑:长期目标是在虚拟化的胜利机器上运行M + B,A通过网络连接。
直接在Win下开发DLL部分而不是在Linux下以及后来的移植是否更好?
答案 0 :(得分:2)
您可以使用消息传递系统(例如IBM MQ Series)在两个应用程序之间发布和接收消息。 JAVA JMS(Java消息系统)可以很容易地连接到消息传递提供者。
答案 1 :(得分:1)
我可能会从Java Native Access开始,如果这不起作用,我可能会看JNI。如果这不起作用,我可能会尝试Apache Thrift。如果它仍然不起作用,我可能会尝试omniORB或任何其他C++ ORB。对不起,你不能直接在Linux下使用Windows DLL(Windows DLL不是跨平台的)。如果你非常有才华和耐心,你可以在仿效Wine下工作。否则,您将需要使用诸如Thrift或CORBA之类的RPC mechanism,或者您可以编写自己的线路协议(这可能听起来像一个好主意,但可能不是),连接您的Windows机器和Linux机器。
答案 2 :(得分:-2)
对于java,您可以使用一个简单的变量类来初始化所有变量并创建单例对象概念,您可以使变量全局可用于特定项目中的其他文件