【问题标题】:Using IKVM-compiled Java .dll in VBA/Excel?在 VBA/Excel 中使用 IKVM 编译的 Java .dll?
【发布时间】:2011-07-29 15:31:23
【问题描述】:

我希望能够在 Excel VBA 工作表中执行 Java 项目中的代码。在 SO 的其他地方,我发现了 IKVM,它是 Java 的 .NET 实现,允许将 .jar 转换为 .dll。我希望这可以让我从 VBA 编辑器中的 .jar 访问类/方法,但我在这样做时遇到了麻烦。

我曾尝试在 VBA 中使用 declare 语句(在许多不同的排列中,试图使其工作),但最常见的错误是指 .DLL 中的入口点。

我也尝试将 .DLL 注册为 Excel 中的引用,但它给出了样板错误并且没有注册它。

作为参考,我一直在使用以下类对其进行测试,然后才费心用整个项目对其进行测试:

public class IKVMTest {
    public static void print(String s) {
        System.out.println(s);
    }
}

这个类由Eclipse编译并导出到IKVMTest.jar中。此时我使用ikvmc -target:library IKVMTest.jar接收IKVMTest.dll。为简单起见,这个 .dll 和我正在测试的 Excel 工作表被转储到 IKVM bin 文件夹中(因为 IKVM .dll 文件有一些依赖项)。

如果我可以让它在这个示例测试中工作,我可以让它在整个项目中工作。

【问题讨论】:

标签: java excel vba dll ikvm


【解决方案1】:

您是否尝试过让您的 .NET 程序集 COM 可见,以便使用 VBA 对其进行实例化?

对由 IKVM 代码生成的类和方法使用 [ComVisible(true)] 可能会使它作为 COM 对象对您的 VBA 应用程序可见。

请看这里以供参考:http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comvisibleattribute.aspx#Y1600

另外,看看这里:如何使用 COM Interop 在 VBA 中调用 .net 程序集 http://blogs.msdn.com/b/smondal/archive/2009/08/31/how-to-call-a-net-assembly-in-vba-using-com-interop.aspx

【讨论】:

  • 问题,当我查看您提供的两个链接时:使用 ComVisible(true) 是我将应用于 VBA 类的东西,对吧?这是否意味着我需要在 VBA 中为我想要引用的所有 Java 类创建一个包装类?
  • 不,comvisible 需要应用于 .NET 程序集。使用从 jar 生成 dll 的 IKVM,您将需要更新这些 dll 以包含 comvisible 或使用实用程序 exe,以便使其对您的 VBA 项目可见。
猜你喜欢
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
相关资源
最近更新 更多