[英]Best way to call VB.NET function from Java?
我正在實習為一家公司的軟件開發人員。 有一個用C#編寫的客戶端安裝的軟件程序,該程序在VB中具有dll-都在.NET框架上。 我們整個基於雲的服務器都是用Java編寫的,所以現在 ,我的任務只是調用Java中的一個獲取/設置一個私有函數的函數(對不起,我不太熟悉VB,所以我可能不恰當地使用了此術語)位於dll中。 不過,最終,我的任務是從客戶端程序收集數據並將其放入我們的服務器中。 在過去的幾天里,我一直在研究如何執行此操作,並找到了一些選擇:
現在,據我所知,分別是我發現的每個問題:
除了我不是真正擅長編程的事實外,我還剩下大部分工作要靠我自己完成,因此非常感謝您閱讀我的問題。 如果我沒有完全解釋需要進一步解釋的內容,請告訴我! 任何其他提示/指針將不勝感激。
您可以將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.