从Java访问DLL中的C#方法

时间:2015-06-05 14:17:00

标签: java c# dll dllimport

我在尝试从Java调用C#中的函数时遇到了麻烦。我已经加载了包含该函数的dll。

错误讯息:

java.lang.UnsatisfiedLinkError: app.clsValidation.validate(Ljava/lang/String;)Ljava/lang/String;

C#代码编译成64位dll:

namespace library {

    public class clsValidation {

        public string validate(string txt) {
            return txt;
        }
    }
}

Java代码

班级:

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);

1 个答案:

答案 0 :(得分:3)

这是预料之中的。您的Java代码将C#DLL视为非托管库。它不是。它不会导出可以使用LoadLibraryGetProcAddress导入的非托管函数。

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

  1. 使用Robert Giesecke的UnamanagedExports。
  2. 创建一个混合模式C ++ / CLI程序集,用于导出非托管函数。
  3. 其他选项包括通过COM公开功能,这很容易从Java中消费。