gpt4 book ai didi

java - 如何使使用 IKVM com 创建的 .dll 可见?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:54 24 4
gpt4 key购买 nike

我看过一些关于这个的帖子,但到目前为止我还没有看到任何解决方案。我有一个 .jar 文件,我正在通过 IKVM 将其转换为 .NET DLL。 .我试图弄清楚如何使 DLL 中的方法在 excel VBA 环境中可用。这是详细信息。

1.) 安装 IKVM 并将其 DLL 注册到 GAC

2.) 运行 IKVM 以创建 .net .dll (mytest.dll)

ikvmc mytest.jar

3.) 注册新的.dll

regasm mytest.dll

4.) 从这里我创建了一个 VB.NET 项目并添加了 mytest.dll 和 IKVM.OpenJDK.Core.dll 作为对该项目的引用。然后我就可以在 .NET 中访问 .dll 中的方法。这太棒了!

5.) 我真正想做的是也能够在 VBA 中使用 .dll。最初 vba 不会直接接受 .dll,因为它是一个 .net 库。我试图创建一个类型库:

regasm /codebase /tlb mytest.dll

这创建了一个很好的 .tlb 文件,但它确实发出了关于库未被强命名的警告。

6.) 然后我将 .tlb 作为引用加载到我的 vba 编辑器中。这有效,但是当我尝试访问这些方法时,没有任何显示。同样,如果我查看我的库的对象查看器,我可以看到我的两个类,但看不到这些类的成员。

此外,我想我可能还需要以某种方式在 VBA 中引用 IKVM.OpenJDK.Core.dll。但是我也不能这样做,因为它是一个 .NET .dll。

有没有人成功地将 .jar 文件转换成可以与 VBA 一起使用的文件?

最佳答案

我认为您始终需要明确标记一个类以通过 COM 互操作使用。下面是一个可从 VBA 中使用的 Java 类的示例:

import cli.System.Runtime.InteropServices.*;

@ClassInterfaceAttribute.Annotation(ClassInterfaceType.__Enum.AutoDual)
public class SampleWidget {
public int Add(int x, int y) {
return x + y;
}
}

编译步骤如下:

  1. 将 IKVM.Runtime.dll 和所有 IKVM.OpenJDK.*.dll 复制到当前目录或 GAC 中。
  2. 运行“ikvmstub mscorlib”以生成 mscorlib.jar。
  3. 创建一个名为 SampleWidget.java 的 Java 源代码,其中包含上述代码。
  4. javac -cp mscorlib.jar;. SampleWidget.java
  5. ikvmc -out:SampleLibrary.dll SampleWidget.class -r:mscorlib.dll
  6. tlbexp SampleLibrary.dll
  7. regasm/codebase SampleLibrary.dll(此步骤需要管理员权限)

现在您可以从 VBA 添加对 SampleLibrary.tlb 的引用并使用 SampleWidget 类。

关于java - 如何使使用 IKVM com 创建的 .dll 可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14967080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com