java - 在 Java 中使用 VisualBasic DLL

标签 java vba dll java-native-interface jna

我必须从 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/

相关文章:

java - 通知客户端中的线程,该线程是在服务器中的 wait() 上发送的

java - 将方法放在与主类文件不同的单独类文件中

vba - 阻止 Excel 在 VBA 制作的公式中将逗号更改为分号

vba - 优化 VBA/Excel 宏代码(在大工作表中查找重复项)

excel - VBA Excel 在字符串的第二个字符后插入符号

java - 2 个 Web 应用程序中的两个小程序访问相同的 DLL

c++ 从 dll 导入函数 - 我的 dll 不导出 lib

java - 如何在 IE 中使用 selenium 记录测试用例

java - ListIterator previous() 和 next() 结果

java - 反编译JAVA DLL