簡體   English   中英

從Java運行C#代碼,反之亦然

[英]Run C# code from Java and vice-versa

我有一個用Java制造的游戲服務器。 我想制作一個加載.NET DLL並在該DLL中調用事件/函數的插件系統,然后在其中必須調用游戲服務器(Java)中的函數。 目前唯一給我帶來麻煩的部分是如何接口Java和.NET dll。

我一直在搜索並找到了一些東西,但是它們都是基於產品的,我想為此創建自己的界面。 嗯,更不用說它需要高性能,如果有必要,該代碼將在一秒鍾內被調用很多次。 有人可以指出或給予我一些想法,我該如何解決?

編輯:

為了使其更明確:

  1. 游戲服務器(Java應用程序)在.NET dll中調用一個函數
  2. Java剛剛調用的.NET函數從Game Server(Java應用程序)調用多個函數。

如果您以Windows為目標,請看看jni4net 這是一個Alpha質量版本,但是Robocode已經使用它在Java運行時內部運行.NET機器人。

另一種選擇是使用高性能的消息傳遞方法。 您將需要第二個過程-可能是.NET插件主機。 然后,該過程與主要的Java游戲過程交換消息。 0MQ這樣的消息傳遞庫非常快,但對於您所想的來說可能不夠快。 此外,您還必須創建大量消息管道,這可能會浪費成本/時間。

嘗試使用iKVM:

IKVM.NET是Java for Mono和Microsoft .NET Framework的實現。 它包括以下組件:

  • 在.NET中實現的Java虛擬機
  • Java類庫的.NET實現啟用Java和.NET互操作性的工具

http://www.ikvm.net/

如果您只有幾種方法要調用,則可以只使用JNI並自己進行操作,而不要使用3rd Party工具(盡管我承認我不知道jni4net的詳細信息)。 提醒一下,我所從事的項目必須做類似的事情(C#-> C / C ++->通過JNI的Java),除了問題,我們什么都沒有。 問題主要是因為Java api沒有任何好的文檔,所以它可能是其中的一部分。 如果有可能,請嘗試將其保持為一種語言,但如果無法實現,請確保進行大量錯誤檢查。 當應用程序崩潰時,很難發現問題(除非您同時擁有Java和C#sutff)。 只是我的$ 0.02 ...

避免二進制耦合。 根據本文的體系結構方法編寫您自己的互操作層。 http://www.codeproject.com/KB/architecture/SerInterfaceXXsd2Code.aspx 為了獲得高性能,您還可以將本文中提到的XML序列化替換為hessian。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM