java - 从 Java 访问 DLL 中的 C# 方法

标签 java c# dll dllimport

我在尝试从 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 中使用。

关于java - 从 Java 访问 DLL 中的 C# 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668843/

相关文章:

c# - 控制台应用程序适用于 Windows,不适用于带有 Mono 的 Linux

c# - ASP.NET 5 添加 WCF 服务引用

c# - 如何从资源中的 DLL 调用函数?

java - 如何对调用 Jersey 客户端 API 的代码进行单元测试?

java - 在已经很困惑的应用程序中添加新代码

java - Android:Firebase 需要太多时间来获取数据

Java 循环优化

c# - c#中的Javascript传统查询字符串参数

java - 错误 1126 (HY000) : Can't open shared library 'lib_mysqludf_sys.dll' (errno: 126) The specified module could not be found. )

c++ - 在 DLL 中创建线程