我正在尝试在JAVA中的.dll文件中使用公共接口。这就是.dll中的公共接口显示的内容:
// Interface declaration.
public interface ISslTcpClient
{
string Encrypt(string requestContent);
string Decrypt(string requestContent);
};
以下是我如何加载我的dll并在eclipse中的Java应用程序中使用它:
public class NJInew {
static {
System.loadLibrary("ICVTnsClient");
}
native String Encrypt(String requestContent);
public static void main(String[] args) {
NJInew p= new NJInew ();
p.Encrypt("pejman");
}
} 但是我收到以下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: NJInew.Encrypt(Ljava/lang/String;)Ljava/lang/String;
at NJInew.Encrypt(Native Method)
at NJInew.main(NJInew.java:13)
请让我知道如何解决这个问题,我将不胜感激。
答案 0 :(得分:0)
我不明白本机DLL如何看起来像Java接口。你确定它是一个JNI DLL吗?您无法从Java调用任何旧DLL。如果它不是JNI DLL,你需要向它添加所需的JNI入口点,从javah
工具开始,或者编写一个包含这些的包装DLL并调用它。
答案 1 :(得分:0)
这个界面看起来非常像用.NET C#编写的。因此,您不需要调用本机DLL,而是管理.NET DLL,这是完全不同的主题。
您可以通过使用本机C ++代码包装.NET DLL并从JAVA调用它来实现它,但是存在许多障碍和挑战......您需要处理类型转换,内存管理,线程,C ++运行时depndencies以及更多...所以不推荐这种方法。
你应该寻找的是像Javonet这样的本地网桥,它会为你处理所有这些事情,并确保你可以在任何机器上运行你的代码。
使用你的界面就像这样:
Javonet.addReference("ICVTnsClient.dll");
NObject client = Javonet.New("SslTcpClient");
//some concreto type which implements this interface
String encryptedStr = client.invoke("Encrypt", "some string");
您可以获得学术和非商业用途的免费许可或尝试免费试用:http://www.javonet.com