【问题标题】:Access C# method in DLL from Java从 Java 访问 DLL 中的 C# 方法
【发布时间】:2015-06-05 14:17:00
【问题描述】:

我在尝试从 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);

【问题讨论】:

    标签: java c# dll dllimport


    【解决方案1】:

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

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

    1. 使用 Robert Giesecke 的 UnamanagedExports 来执行此操作。
    2. 制作导出非托管函数的混合模式 C++/CLI 程序集。

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

    【讨论】:

    • 感谢您的指导!现在我知道要寻找什么了。
    • COM 是什么意思?
    • 尝试网络搜索。我可以这样做,但我想你也可以。
    • 我只想要 COM 的含义......我没有得到任何谷歌搜索“COM java”的信息。谢谢。
    • Google COM 独立。这是一个 MS 技术。
    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多