从 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 视为非托管库。它不是。它不导出可以使用 LoadLibraryGetProcAddress.

导入的非托管函数

如果您希望从 .net DLL 导出非托管函数,那么您可以:

  1. 使用 Robert Giesecke 的 UnamanagedExports 来做到这一点。
  2. 制作导出非托管函数的混合模式 C++/CLI 程序集。

其他选项包括通过 COM 公开功能,这很容易从 Java 中使用。