簡體   English   中英

從Java調用VB.NET函數的最佳方法?

[英]Best way to call VB.NET function from Java?

我正在實習為一家公司的軟件開發人員。 有一個用C#編寫的客戶端安裝的軟件程序,該程序在VB中具有dll-都在.NET框架上。 我們整個基於雲的服務器都是用Java編寫的,所以現在 ,我的任務只是調用Java中的一個獲取/設置一個私有函數的函數(對不起,我不太熟悉VB,所以我可能不恰當地使用了此術語)位於dll中。 不過,最終,我的任務是從客戶端程序收集數據並將其放入我們的服務器中。 在過去的幾天里,我一直在研究如何執行此操作,並找到了一些選擇:

  • Java本機訪問(JNA)
  • Java本機接口(JNI)
  • COM / ActiveX橋接器(盡管我不能完全肯定地說我知道這些是什么/如何使用它們_
  • JNBridge

現在,據我所知,分別是我發現的每個問題:

  • 使用此選項需要使用C或C ++從Java到.NET的中介,並且鑒於我只真正了解Java,所以我真的不想糾結於此。
  • 似乎比JNA稍微復雜一點,但我認為它與JNA相比並沒有真正的優勢。 他們倆似乎都需要C / C ++中介。
  • 除了我不確定如何實現該方法外,我不能說太多。
  • 這座橋梁和其他類似的橋梁必須是不得已的選擇。 該產品的開發者許可證價格昂貴,我確定他們沒有資源來使用此產品。 我可以嘗試詢問,但我真的不認為可以要求公司進行大量投資來代替實習生。

除了我不是真正擅長編程的事實外,我還剩下大部分工作要靠我自己完成,因此非常感謝您閱讀我的問題。 如果我沒有完全解釋需要進一步解釋的內容,請告訴我! 任何其他提示/指針將不勝感激。

您可以將VB.NET公開為Web服務以在Java中使用...

在這種情況下,我永遠都不會使用Web服務。 還應盡快跳過COM / ActiveX,以避免出現進一步的問題;)JNA / JNI聽起來不錯,但途中有很多隱藏的東西。 建議的JNBridge是一個好主意,因為它使您有可能專注於核心問題,並且采用這種方法,您只需將所有互操作性(JNA / JNI)任務交給第三方即可。

作為替代選擇,我建議您檢查名為Javonet的JNBridge的輕型對等件。 它不需要代理生成或安裝任何插件。 您僅獲得一個JAR文件,可以直接使用它打開對任何自定義.NET DLL和.NET Framework的訪問,而.NET方面沒有任何更改。

性能非常高,幾乎是本機的,並且可以覆蓋90%的情況,例如:使用任何.NET對象,方法,字段,數組,泛型,事件,異常,數據類型轉換等...

此外,此類橋的價格/價值指數非常高,以至於您只有一個屬性要讀取或要執行一種方法之前,就無法開始定制開發。 否則我會選擇第三方橋接器。

Javonet可與任何.NET DLL一起使用,包括VB.NET,C#等。請使用Javonet語法從JAVA中使用.NET的簡短示例代碼:

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

從JAVA方面的Javonet API可以看到,您將獲得一個名為“ NObject”的新對象,它是任何.NET對象的句柄類型,您可以在其上執行諸如調用方法,獲取/設置字段和參數等操作,這些操作可以作為JAVA類型的String提供。 ,Integer,Float,它們將自動轉換為.NET類型。

有關更多詳細信息,請查看快速入門指南: http : //www.javonet.com/#getting_started

我可以將JNA與UnmanagedExports一起使用,因為它只需要C#,VB.NET或F#.dll,並且具有以下標頭

C#:

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

之后,您可以像使用Java中的任何其他C或C ++ .dll一樣,通過JNA使用它。 您可以找到一個示例和一些類似的問題我無法解決的限制: 使用JNA從Java調用DLL

我僅使用C#進行了嘗試,但是如文檔中所述,它應可用於C#,F#和VB.NET。

暫無
暫無

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

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