我必须从 Java 应用程序访问 Office 应用程序的 VBA 代码,我发现 THIS这表示我可以使用 JNI 通过 VisualBasic DLL 访问 VBA 代码。如果没有必要,我不想使用 COM 桥,我宁愿使用 DLL 解决方案。 我在 Visual Studio 2013 中创建了一个 VisualBasic 类库(一个测试它是否有效的简单示例):
Public Class Test1
Public Function box()
MsgBox("boxtest!")
End Function
End Class
我将其构建为一个版本并将其放入我的 Java 项目中:
public class Test1 {
static{
System.loadLibrary("Test1");
}
public native void box();
}
该函数正在由 new Test1().box();
调用。
我收到以下异常:线程“main”java.lang.UnsatisfiedLinkError中的异常:test.Test1.box()V
我还使用 JNA 来访问 DLL,但经过几个小时的尝试后我无法让它工作(我还读到它不能与 VisualBasic DLL 一起使用)。 我将 src 文件夹的 native 库文件夹设置为包含 DLL 的文件夹。
问题:我可以在 Java 中使用 VisualBasic DLL,如果可以,可以与 JNA 或 JNI(或两者)一起使用,如果可以,我做错了什么,如何正确访问该函数? (我想剩下的返回和参数就很容易了......)
提前非常感谢大家,祝大家圣诞快乐! :)
最佳答案
不知道为什么它找不到你的图书馆。根据我对 JNI 的内存,您似乎没有完成用于调用 native 例程的 JNI 设置,但错误消息只是说找不到它。您可以尝试确定库加载语句是否有效。
DLL 是遵循一定规则和约定的库;我不知道“Visual Basic DLL”和任何其他类型之间有什么很大的区别。在某种程度上,它们需要相同,因为 Windows 程序不区分用不同语言编写的 DLL,据我所知,我已经完成了 VB 足够的工作,知道我还没有看到文档说“这可以从VB,但不是来自其他语言”等。
让 JNI/JNA 工作起来既棘手又乏味。在这种情况下,语言运行时(尤其是 Java 运行时)告诉您的正常内容并不适合您。您必须煞费苦心地检查您拥有的任何文档的每一行、您传递的每个参数、值与引用的每次使用等。
我曾经使用过 GitHub 库 here .
祝你好运。
关于java - 在 Java 中使用 VisualBasic DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27637475/