微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从WIN32应用程序使用的C#COM DLL调用Java代码?

我有一个非常简单的问题.我有一个用Delphi 2007 for WIN32编写的应用程序.它使用一个C#DLL,通过它的COM接口导入到项目中,这是一个简单的技巧,可以避免注册COM对象.但是现在我有一个 Java生成的.JAR文件,我想从我的应用程序中调用它.虽然我可以访问Delphi和C#代码,但我只是无法访问Java代码.

我可以做两件事.我可以从Delphi代码调用java类,然后从C#代码调用代码,该代码将再次从Delphi代码调用.或者我只是直接从C#调用Java代码. (再次从Delphi调用.)

我知道这是一个复杂的设置. Delphi应用程序包含一些GUI和一些特殊硬件的通信模块.这些没有.NET驱动程序. C#代码用于维护数据库通信,包括与Cardspace和其他安全选项相关的一些逻辑. java类是第三方编码模块,由外部方创建,它计算数据库中数据的特殊哈希码,并进行一些额外的处理,并控制另一块硬件.

最大的问题:没有网络通讯!它将在没有安装网络硬件的特殊计算机上运行.它是一个独立的Windows XP系统.虽然COM,Java和.NET都可以,但我不能在这个系统上使用任何TCP / IP通信.

如果我接受它,那将是我的下一个项目.已经,它让我头疼,所以我想我会跳过这个机会,虽然它确实有几种不同语言的有趣混合.我想我会告诉他们投资6位数来购买新硬件,而不是在我工作的28天内花费近5位数…
关于我可以分享的项目的一些细节:

Delphi代码能够通过COM端口连接到PBX系统,该端口用于发送传真,发送和接收SMS消息,并通过在呼入后通过电话输入数字来接收简单的命令.整个系统已经写入这一切都基于WIN32代码.

Java代码一个客户端模块,用于与机器人系统进行通信,该机器人系统监视环境,处理一些精密对象并对这些对象进行持续测量.它在Java中,因此它与平台无关. Java客户端和机器人硬件之间的通信是通过网络完成的,网络硬件/驱动程序不喜欢通过该网络进行额外的聊天. (这就是为什么它尽可能地被禁用.甚至Windows都不会得到更新.)

C#代码是从Java模块收集数据并实际存储这些内存中的常规备份XML,以防万一发生.它是与Java模块和一些其他模块进行通信,这些模块处理以客户自己开发的.NET兼容域特定语言编写的复杂计算.这些模块不支持COM,因此不支持c#包装器.

客户现在需要运算符靠近硬件来操纵机器人.他可以升级硬件,花费他很多,但它会给他更好的远程访问,花费大约250.000欧元来取代古老的机器人和其他硬件,或者他支付一些开发人员的十分之一,以获得他当前的硬件照着做.就个人而言,我认为他不应该是这样的小气鬼,但他只想估计开发人员的解决方案会花费多少钱.代码更改并不大,因为大多数功能已经存在.它只是在没有任何TCP / IP通信的情况下将它组合在一起,使其变得更加复杂.

基本上,他们想要提供的指令是加快速度或减慢速度,发送不定期报告以及在出现问题时发送短信警告.现在,他们坐在屏幕旁边,一整天都在喝咖啡,边读报纸或其他杂志.虽然这几天很有趣,但他无法找到想要一直这样做的人,每周7天,每天24小时. (是的,他们日夜工作,包括周末.)

基本上,这就是我所知道的全部.甚至没有看到它需要安装的PC,但它们有一些配置都以相同的方式,所以我可以得到一个实验,一旦需要. (这也是一个地狱调试.)最后一点,我提出了成本估算,并提出了一个足够高的数字来说服我的雇主进行硬件升级.更昂贵,但它会保持它的可靠性.

正因为如此,这个Q刚刚成为学术界…

解决方法

JNBridge提供了Java-to-.NET桥接(反之亦然).它得到了特别的支持,相对便宜,并且效果很好.它具有低延迟,并且不需要TCP / IP或网络通信.您无需访问Java代码即可通过网桥从.NET调用它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐