0

私は会社のソフトウェア開発者としてインターンしています。C# で記述されたクライアント インストール ソフトウェア プログラムがあり、DLL が VB に含まれています。どちらも .NET フレームワーク上にあります。私たちのクラウドベースのサーバー全体は Java で書かれているので、今のところ、私のタスクは単にプライベート (? 申し訳ありませんが、VB にあまり詳しくないので、この用語を不適切に使用している可能性があります) 変数を取得/設定する Java の関数を呼び出すことです。 dll 内にあります。ただし、最終的には、クライアント プログラムからデータを収集し、それをサーバーに配置することが私の仕事になります。過去数日間、これを行う方法を調査しており、いくつかのオプションを見つけました。

  • Java ネイティブ アクセス (JNA)
  • Java ネイティブ インターフェイス (JNI)
  • COM/ActiveX ブリッジ (ただし、これらが何であるか/どのように使用するかを完全に理解しているとは言えません_
  • JNBridge

私が知る限り、これらはそれぞれ私が見つけた問題です:

  • このオプションを使用するには、C または C++ のいずれかを使用して Java から .NET への仲介が必要であり、Java しか知らないので、この混乱に巻き込まれるのは本当に嫌です。
  • JNA よりも少し複雑に思えますが、とにかく JNA に勝る利点はないと思います。どちらも C/C++ の仲介が必要なようです。
  • ... このメソッドを実装する方法がよくわからないという事実を除けば、多くを語ることはできません。
  • この橋や他の同様の橋は、最後の手段でなければなりません。この製品の開発者ライセンスは非常に高価であり、この製品を使用するためのリソースがないことは確かです。聞いてみることもできますが、企業にそんなに投資するように頼むのはインターンの立場ではないと思います。

私はプログラミングにそれほど熟練していないという事実に加えて、私はほとんど自分でこれを行うことを余儀なくされているので、私の質問を読んでくれてありがとう。十分に説明していないことで、さらに説明が必要な場合は、お知らせください。他のヒント/ポインターは非常に高く評価されます。

4

3 に答える 3

0

Javaで消費されるWebサービスとしてVB.NETを公開できます...

于 2013-06-27T15:18:34.927 に答える
0

この場合、私は決してWebサービスを使用しません。COM/ActiveX も、さらなる問題を回避するために、できるだけ早くスキップする必要があります ;) JNA/JNI は良さそうに聞こえますが、途中で多くの隠し要素があります。提案された JNBridge は、コアの問題に集中できる可能性を提供し、このアプローチを使用すると、すべての相互運用性 (JNA/JNI) タスクをサードパーティに引き渡すだけでよいため、良い考えです。

別のオプションとして、Javanet と呼ばれる JNBridge の軽量版を確認することをお勧めします。プロキシの生成やプラグインのインストールは必要ありません。.NET 側で変更を加えることなく、すぐに使用できるカスタム .NET DLL および .NET Framework にアクセスできるようにする JAR ファイルが 1 つだけ取得されます。

パフォーマンスは非常に高く、ほぼネイティブであり、.NET オブジェクト、メソッド、フィールド、配列、ジェネリック、イベント、例外、データ型の変換などを使用して、90% のケースをカバーする可能性があります...

さらに、このようなブリッジの価格/価値指数は非常に高いため、読み取るプロパティまたは実行するメソッドが 1 つだけになるまで、カスタム開発を開始しても報われることはありません。それ以外の場合は、サードパーティのブリッジを使用します。

Javaonet は、VB.NET、C# などを含む任意の .NET DLL で動作します。Javanet 構文を使用して Java から .NET を使用するこの短いサンプル コードを確認してください。

NObject yourObj = Javonet.New("Your.Namespace.YourDotNetClass");
yourObj.invoke("YourMethod","arg1",2);

JAVA側のJavanet APIからわかるように、「NObject」と呼ばれる新しいオブジェクトを取得します。これは、メソッドの呼び出し、フィールドの取得/設定、JAVA型文字列として提供できる引数などの操作を実行できる.NETオブジェクトへのハンドルのタイプです。 、Integer、Float であり、それらは自動的に .NET 型に変換されます。

詳細については、クイック スタート ガイドを確認してください: http://www.javonet.com/#getting_started

于 2013-10-28T12:31:41.043 に答える
0

次のヘッダーを持つ C#、VB.NET、または F# .dll のみが必要なため、 UnmanagedExportsと一緒に JNA をお勧めできます。

C#:

[RGiesecke.DllExport.DllExport]
public static String yourFunction(String yourParameter)
{
    return "CSharp String";
}

その後、Java の他の C または C++ .dll と同様に、JNA で使用できます。この同様の質問で、私の回答では解決できなかった例といくつかの制限を見つけることができます: Call DLL from Java using JNA

私は C# でのみ試しましたが、ドキュメントに記載されているように、C #、F#、および VB.NET で動作するはずです。

于 2014-04-10T07:26:43.793 に答える