从 Java 访问 DLL 中的 C# 方法
Access C# method in DLL from Java
我在尝试从 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 调用用 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 中使用。