【问题标题】:Java (JNA) pass-by-reference for dll用于 dll 的 Java (JNA) 引用传递
【发布时间】:2017-12-18 11:22:48
【问题描述】:

我必须将一些用作 DLL 的 VB6 工具翻译成另一种语言。 由于我对 C++ 不是很熟悉,并且有从 Java 应用程序构建 DLL 的选项,所以我决定用 Java 编写。

问题: 在原始的 VB6 代码中有一些函数,它们通过引用传递参数。 由于这个 DLL 被用作另一个工具的接口,因此对它的 DLL 进行了一些调用,这些调用也通过引用传递了一些参数。

我找到了几种传递参数的方法,因此它们是可变的,但它们都不适合我的问题,因为环境将方法签名保持原样是完美的。

知道如何在不更改方法签名的情况下解决这个问题吗?

PS:大多数 byRef 传递的参数都是字符串。

【问题讨论】:

  • 也许一些代码示例会有助于更好地理解
  • 请在您的问题中说明您使用哪些工具来调用相关 DLL 如果您是在谈论当您的工具用作 DLL 时通过引用接收参数,请还要指定您使用哪些工具从 java 创建 DLL,因为任何答案都取决于您用于这些任务的具体技术和库。
  • 我正在尝试为 Java 中的 C# 程序创建一个 DLL。由于我对 C++ 不是很熟悉,并且看到可以通过 JNI 或 JNA 做一些本机的事情,所以我决定用 Java 来做。 JNA 非常适合调用其他 DLL 的函数并将所有这些函数包装到 DLL 中。我唯一的问题是参考参数。到目前为止,我还无法将 C# 中的参数传递给 lib 中的 Java 方法并在其中更改它的值。这对我来说是 Java 原生的唯一问题。仍在寻找解决方法。

标签: java dll vb6 jna


【解决方案1】:

在此处查看此库 (JNA),这应该可以让您做您想做的事。

https://github.com/java-native-access/jna

虽然从 Java 调用 DLL 不是一个好选择,但使用 C# 来完成该任务会更容易。

【讨论】:

  • 我已经在使用这个来调用外部 DLL。感谢您的提示,还没有看到,它也有很多可供参考的内容。你对这个库有点熟悉吗?我找到了 StringByReference 类 here 的一个很好的例子,但我仍然不确定,如果我可以将参数声明为 StringByReference 甚至是指针,如果它是通过引用传递的字符串
  • 抱歉,我们的项目最终决定将我们需要的 DLL 静态包装在 C# 中(因为这很容易做到),并将函数导出为 Web 服务(长话短说),所以我只知道 jna 是可能,但我的工作示例已经消失了大约 5 年 ^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2014-05-06
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多