gpt4 book ai didi

c# - 如何使用 JNA 库在 Java 中使用 C# 函数

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:53 26 4
gpt4 key购买 nike

我花了很多时间尝试在我的 Java 应用程序中使用 C# 函数,但没有成功...我在 C# 中编写了以下库:

public class Converter
{

public Converter()
{
}

public bool ConvertHtmlToPdf(String directoryPath)
{
//DO SOMETHING
}
}

此 dll 调用另一个 dll 进行一些操作,但当我编译它时,我可以在我的 Realse 文件夹中找到 Dll,一切似乎都正常,所以我使用 32 位选项、64 位和任何 CPU 选项编译它,以确保这不是我的问题。

使用 Dependency Walker 分析我的 dll 文件在 32 位和任何 CPU 选项中,它表示找不到 IESHIMS.DLL,并显示此消息:

警告:至少找不到一个延迟加载依赖模块。警告:由于延迟加载依赖模块中缺少导出函数,至少有一个模块具有未解析的导入。

它不会出现在 64 位文件中,但是我找不到我的 ConvertHtmlToPdf 函数。

因为我不知道它是否相关,所以我的第二步是在 Java 代码中。

要加载我的库,我会这样做:

System.setProperty("jna.library.path", "C:\\Program Files (x86)\\Facilit\\Target App\\lib");

和:

public interface IConversorLibrary extends Library {

IConversorLibrary INSTANCE = (IConversorLibrary) Native.loadLibrary("converter", IConversorLibrary.class);

void ConvertHtmlToPdf(String directoryPath);
}

(lib 似乎加载成功,因为如果我尝试在我的应用程序运行时删除 dll 文件,它说无法删除,因为它正在使用中)最后:

IConversorLibrary.INSTANCE.ConvertHtmlToPdf(directoryPath);

但是结果并不是真的如我所愿:

java.lang.UnsatisfiedLinkError: Error looking up function 'ConvertHtmlToPdf': Could not find the specified procedure.

我不知道我做错了什么,我已经尝试了很多教程和很多东西,但一切似乎都有效,非常感谢任何帮助。

最佳答案

此 Nugget 非常易于使用且运行完美。 https://www.nuget.org/packages/UnmanagedExports

您需要 Visual Studio 2012 (express)。安装后,只需在要导出的任何静态函数之前添加 [RGiesecke.DllExport.DllExport]。就是这样!

示例:

C#

[RGiesecke.DllExport.DllExport]
public static int YourFunction(string data)
{
/*Your code here*/
return 1;
}

Java

在顶部添加导入:

   import com.sun.jna.Native;

在你的类中添加接口(interface)。它是您的 C# 函数名称,前面有字母“I”:

  public interface IYourFunction extends com.sun.jna.Library
{
public int YourFunction(String tStr);
};

在类中需要的地方调用 DLL:

IYourFunction iYourFunction = (IYourFunction )Native.loadLibrary("full or relative path to DLL withouth the .dll extention", IYourFunction.class);//call JNA
System.out.println("Returned: " + IYourFunction.YourFunction("some parameter"));

关于c# - 如何使用 JNA 库在 Java 中使用 C# 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com