我是一家公司的软件开发人员。有一个用C#编写的客户端安装的软件程序,它在VB中都有dll - 都在.NET框架上。我们整个基于云的服务器都是用Java编写的,所以现在,我的任务就是调用Java中的一个函数来获取/设置一个私有(对不起,不太熟悉VB所以我可能使用这个术语不恰当)变量位于dll中。但最终,我的任务是从客户端程序收集数据并将其放入我们的服务器中。我过去几天一直在研究如何去做这件事,并找到了一些选择:
据我所知,这些是我分别找到的问题:
为了增加我不是那么擅长编程的事实,我一直专注于自己这样做,所以非常感谢提前阅读我的问题。如果有什么我没有完全解释,需要进一步解释,请告诉我!任何其他提示/指示将非常感激。
答案 0 :(得分:0)
您可以将VB.NET公开为Web服务,以便在Java中使用...
答案 1 :(得分:0)
在这种情况下我永远不会使用webservices。 COM / ActiveX也会尽快被跳过以避免进一步的问题;)JNA / JNI听起来不错,但是你的路上有很多隐藏的东西。建议的JNBridge是个好主意,因为它使您可以专注于您的核心问题,并采用这种方法,您只需将所有互操作性(JNA / JNI)任务移交给第三方。
作为替代选项,我建议你检查一下名为Javonet的JNBridge的轻型对应物。它不需要代理生成或任何插件的安装。您只需获得一个JAR文件,即可打开您对任何自定义.NET DLL和.NET Framework开箱即用的访问权限,而无需在.NET端进行任何更改。
性能非常高,几乎是原生的,可能性覆盖了90%的情况,例如:使用任何.NET对象,方法,字段,数组,泛型,事件,异常,数据类型翻译等......
此外,此类网桥的价格/价值指数如此之高,以至于在您只有一个要读取的属性或一个要执行的方法之前,它将永远不会得到回报来启动自定义开发。否则我会选择第三方桥。
Javonet适用于任何.NET DLL,包括VB.NET,C#等。使用Javonet语法检查这个使用.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
答案 2 :(得分:0)
我可以和UnmanagedExports一起推荐JNA,因为它只需要带有以下标题的C#,VB.NET或F#.dll
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#尝试过,但正如docu中所述,它应该适用于C#,F#和VB.NET。