2017-12-18 240 views
0

我必须将一些用作DLL的VB6工具转换为另一种语言。 因为我对C++不是很熟悉,并且有从Java应用程序中构建DLL的选项,所以我决定用Java编写它。Java(JNA)通过dll引用

问题: 在原始的VB6代码中有一些函数,那些函数通过引用传递参数。 因为这个DLL被用作另一个工具的接口,所以有一些调用它的DLL,它也通过引用传递了一些参数。

我发现了一些传递参数的方法,所以它们将是可变的,但它们都不适合我的问题,因为它对于环境离开方法签名是完美的。

任何想法如何解决那个没有,改变方法签名?

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

+0

也许几个代码示例将有助于更好地理解 – DaveInCaz

+0

请在您的问题中澄清您正在使用哪些工具调用有问题的DLL 如果您正在讨论通过引用接收*参数,当您的工具用作DLL,还请指定您使用哪些工具从Java创建DLL,因为任何答案都取决于您用于这些任务的具体技术和库。 – Yaro

+0

我正在尝试为Java中的C#程序创建一个DLL。由于我对C++并不熟悉,并且看到可以通过JNI或JNA来完成一些本地的事情,所以我决定用Java来做。 JNA非常适合调用其他DLL的函数,并将所有这些包装到DLL中。我唯一的问题是参考参数。到目前为止,我一直无法将C#中的参数传递给lib中的Java方法,并在其中更改它的值。这是Java本身的唯一问题。仍在寻找工作。 – sontyp

回答

0

看看这个图书馆在这里(JNA),这应该让你做你想做的。

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

虽然从Java调用的DLL是不是一个很好的选择,它本来就容易使用C#该任务。

+0

我已经在使用这个调用外部DLL。感谢您的提示,没有看到,它也有这么多的参考。 你对这个图书馆有点熟悉吗? 我发现一个StringByReference类[这里](https://stackoverflow.com/questions/29162569/jna-passing-string-by-reference-to-dll-but-non-return)的一个很好的例子,但我' m仍然不确定,如果我可以只声明一个参数为StringByReference或者一个指针,如果它是一个通过引用传递的字符串 – sontyp

+0

对不起,我们的项目最终决定在C#中静态替换我们需要的DLL(因为它很容易做到),并将函数作为webservice(长篇故事)导出,所以我只知道它可能与jna一起使用,但我的工作示例已经消失了大约5年。^^ – Yaro