从Java运行C#代码,反之亦然

时间:2010-12-22 19:48:12

标签: c# java .net

我有一个用Java制作的游戏服务器。我想创建一个插件系统,加载.NET DLL并调用该DLL内的事件/函数,然后在那些我将不得不调用游戏服务器(Java)中的函数。目前唯一给我带来麻烦的部分是如何连接java和.NET dll。

我一直在寻找并发现了一些东西,但它们都是基于产品而我想为此制作我自己的界面。啊,更不用说它需要具有高性能,如果必须的话,代码将在一秒钟内调用很多次。有人能指出或给我一些想法我怎么能解决这个问题?

编辑:

使其更明确:

  1. Game Server(Java应用程序)调用.NET dll中的函数
  2. java刚刚调用的.NET函数从Game Server(Java Application)调用多个函数。

4 个答案:

答案 0 :(得分:2)

如果您的目标是Windows,请查看jni4net。这是一个alpha质量版本,但Robocode已经使用它在Java运行时内运行.NET机器人。

另一种选择是使用高性能消息传递方法。您需要第二个进程 - 可能是.NET插件主机。然后,该进程与主Java游戏进程交换消息。像0MQ这样的消息传递库非常快,但对于您的想法可能还不够快。此外,您还必须创建大量消息管道,这可能会花费成本/时间。

答案 1 :(得分:1)

尝试使用iKVM:

  

IKVM.NET是Mono和Microsoft .NET的Java实现   框架。它包括以下组件:

     
      
  • 以.NET实现的Java虚拟机
  •   
  • Java类库的.NET实现支持Java和.NET的工具   互操作性
  •   

http://www.ikvm.net/

答案 2 :(得分:0)

如果你只有一些方法,你可能只是使用JNI并自己做而不是第三方工具(虽然我承认我不知道jni4net的细节)。请注意,我所涉及的项目必须做类似的事情(C# - > C / C ++ - > Java通过JNI),我们只有它的问题。问题主要是因为java api没有任何好的文档,所以可能是它的一部分。如果可能的话尝试将其保留为一种语言,但如果不可能,请确保进行大量错误检查。当应用程序崩溃时,很难找到问题(除非你拥有java和C#sutff)。只是我的0.02美元......

答案 3 :(得分:0)

避免二元耦合。根据本文中的体系结构方法编写自己的互操作层。 http://www.codeproject.com/KB/architecture/SerInterfaceXXsd2Code.aspx。 为了获得高性能,您还可以使用hessian替换本文中提到的XML序列化。