我在尝试从 Java 调用用 C# 编写的函数时遇到问题。我已经加载了包含该函数的 dll。
错误信息:
java.lang.UnsatisfiedLinkError: app.clsValidation.validate(Ljava/lang/String;)Ljava/lang/String;
编译成 64 位 dll 的 C# 代码:
namespace library {
public class clsValidation {
public string validate(string txt) {
return txt;
}
}
}
Java代码
类(class):
package app;
public class clsValidation {
static {
System.loadLibrary("library");
}
public native String validate(String txt);
}
我是如何在 Java 中调用它的:
String txt = "something";
String result = new clsValidation().validate(txt);
最佳答案
这是意料之中的。您的 Java 代码将 C# DLL 视为非托管库。它不是。它不导出可以使用 LoadLibrary
和 GetProcAddress
导入的非托管函数。
如果您希望从 .net DLL 导出非托管函数,那么您可以:
- 使用 Robert Giesecke 的 UnamanagedExports 来执行此操作。
- 制作一个导出非托管函数的混合模式 C++/CLI 程序集。
其他选项包括通过 COM 公开功能,这很容易从 Java 中使用。
关于java - 从 Java 访问 DLL 中的 C# 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668843/