从一个C#COM DLL调用Java代码’;WIN32应用程序使用了什么?

从一个C#COM DLL调用Java代码’;WIN32应用程序使用了什么?,c#,java,delphi,C#,Java,Delphi,我有一个非常简单的问题。我有一个用Delphi2007为WIN32编写的应用程序。它使用一个C#DLL,通过它的COM接口导入到项目中,并使用一个简单的技巧来避免注册COM对象。但是现在我有了一个Java生成的.JAR文件,我想从我的应用程序中调用它。虽然我可以访问Delphi和C#代码,但我无法访问Java代码 我可以做两件事。要么我从Delphi代码调用Java类,然后从C代码调用Java类,C代码再次从Delphi代码调用Java类。或者我直接从C#调用Java代码。(再次从Delphi调

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

我可以做两件事。要么我从Delphi代码调用Java类,然后从C代码调用Java类,C代码再次从Delphi代码调用Java类。或者我直接从C#调用Java代码。(再次从Delphi调用。)

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

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

这将是我的下一个项目,如果我接受它。它已经让我头疼了,所以我想我会跳过这个机会,尽管它确实混合了几种不同的语言。我想我会告诉他们投资6位数购买新硬件,而不是花近5位数的钱来完成28天的工作…
我可以分享一些关于该项目的详细信息:

Delphi代码能够通过一个COM端口连接到PBX系统,该端口用于发送传真、发送和接收SMS消息,并且只需在来电后用手机输入数字即可接收简单命令。已经为此编写了一个完整的系统,全部基于WIN32代码

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

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

客户端现在需要操作员靠近硬件来操作机器人。他可以升级硬件,花费相当多,但这将给他提供更好的远程访问,这将花费约25万欧元来替换古老的机器人和其他硬件,或者他支付一些开发人员该金额的十分之一,让他现有的硬件也这样做。就个人而言,我认为他不应该是一个吝啬鬼,但他只是想估算一下开发人员解决方案的成本。代码更改不大,因为大部分功能已经存在。它只是将所有这些结合起来,而没有任何TCP/IP通信,这使得它变得更加复杂

基本上,他们想要给出的指令是加速或减速,偶尔发送报告,并在出现问题时发送短信警告。现在,他们有一个手术室坐在屏幕旁,整天一边喝咖啡一边看报纸或其他杂志。虽然这几天很有趣,但他找不到一个一直想这样做的人,24/7。(是的,他们日夜工作,包括周末。)

基本上,我只知道这些。我甚至没有看到需要安装的PC,但是他们有一些配置都是相同的,所以一旦需要,我可以用一台进行试验。(调试也将是一个地狱。)
最后,我给出了成本估算,并得出了足够高的数字,说服我的潜在雇主进行硬件升级。更昂贵,但它将保持它的可靠性


正因为如此,这个问题才变得学术化……

无论是否安装了任何网络硬件,独立的Windows XP系统都可能仍然有本地TCP/IP网络可用。您可以让程序在
localhost
地址(127.0.0.1)上的TCP端口上侦听,并让其他服务连接到它们,以通过您选择的任何协议交换信息。HTTP和REST可能是一个合适的选择


这可能比尝试将所有这些技术集成到一个Franken项目中要轻松得多。

另一种选择是。它是.NET的Java实现。请看一看,这里的答案可能会对您有所帮助。

提供了一个Java到.NET的网桥(反之亦然)。它得到了商业支持,相对便宜,而且运行良好。它的低延迟,不需要TCP/IP或网络通信。通过网桥从.NET调用Java代码不需要访问Java代码

我是《JVM和CLR之间的开源进程内桥梁》的作者。它建立在JNI和PInvoke之上。不需要C/C++代码。希望它能对您有所帮助。

实际上,要求是在这个项目中没有使用TCP/IP的代码。所以没有开放的端口。伊格