25

Webサービスのような通常の答えを探しているわけではありません。同じマシンで実行できる軽量のソリューションを探しています。

編集:Javaで.NETメソッドを呼び出す方法を探しています

4

6 に答える 6

24

私は、JVM と CLR の間のオープン ソースのインタープロセス ブリッジであるjni4netの作成者です。JNI と PInvoke の上に構築されています。C/C++ コードは必要ありません。お役に立てば幸いです。

于 2009-10-31T19:25:51.467 に答える
11

Java は COM と通信でき、.NET は COM インターフェイスを公開できると思います。そのため、サードパーティを必要としない非常に軽量なソリューションになる可能性があります。ソケットを使用してプログラム間で通信するオプションもあります。これにより、IIS の重いインスタンスをマシンにインストールする必要がなくなります。

于 2008-11-12T12:03:50.667 に答える
5

IKVMを見たことがありますか?

于 2008-11-12T11:37:16.227 に答える
3

Java Native Interface について調べたことはありますか?

私が過去に行ったことは、Java と .NET (および COM、NSIS スクリプト言語、およびその他のテクノロジ) の両方から呼び出し可能な C ライブラリを作成することでした。

JNI は、いくつかのメソッドのみを公開する場合にはうまく機能しますが、たとえば、.NET フレームワーク全体を公開する場合は、作成する必要のあるヘッダー ファイルとラッパー メソッドの数が多くなり、扱いにくくなる可能性があります。 .

于 2008-11-12T11:41:34.423 に答える
1

実稼働環境で IKVM を試しましたが、クラッシュし続けました。商用製品である JNBridge を使用していますが、非常に安定しており、ASP.NET 環境で適切に動作します。

于 2008-11-12T11:45:36.553 に答える
1

Java コードを .NET (または Mono) で実行したい場合は、IKVMを使用して実行できます。

(私の知る限り) 現在の Java コンパイラは .NET アセンブリを読み取らないため、2 つの手順があります。最初に、使用する .NET アセンブリのシグネチャを持つダミー クラスとメソッドを含むスタブ JAR を生成する必要があります。これにより、 javac(または IDE は) 利用可能なメソッドを認識できます。たとえば、メインの .NET 標準ライブラリの何かを Java から使用する場合は、次を実行します。

ikvmstub mscorlib

スタブを生成しmscorlib.jarます。(Linux では Monomscorlib.dllアセンブリが自動的に検出されましたが、失敗した場合は、DLL へのフル パスを指定する必要がある場合があります。)

次に、それを使用する Java ファイルを作成できます ( IKVM ドキュメントの例に基づく)。

import cli.System.IO.Directory;
public class IKVMTest {
    public static void main(String[] args) {
        for(String file : Directory.GetFiles(".")) // From .NET standard library
            System.out.println(file);              // From Java standard library
    }
}

CLI パッケージにはプレフィックスが付いていることに注意しcli.cli.SystemくださいSystem

コンパイルするには、クラスパスにスタブ JAR を含めます。

javac -classpath mscorlib.jar IKVMTest.java

Java リンクは実行時に行われるため、出力classファイルは目的の名前と署名のメソッドを使用しますが、IKVM で実行する場合は、ダミーのスタブ メソッドを実際の .NET メソッドと交換できます。

ikvm IKVMTest

.NET メソッドを呼び出して、現在のディレクトリ内のファイルを出力します。

于 2012-07-27T07:14:05.280 に答える