我已经看过几篇帖子,但到目前为止我还没有看到任何解决方案。我有一个.jar文件,我通过IKVM转换为.NET DLL。我试图弄清楚如何在excel VBA环境中使DLL中的方法可用。这是详细信息。
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。)然后我在我的vba编辑器中加载.tlb作为参考。这是有效的,但是当我尝试访问方法时,没有任何显示。同样,如果我查看我的库的对象查看器,我可以看到我的两个类,但不能看到这些类的成员。
此外,我想我也可能需要以某种方式引用VBA中的IKVM.OpenJDK.Core.dll。但是我不能这样做,因为它是.NET .dll。
是否有人成功将.jar文件转换为可与VBA一起使用的内容?
答案 0 :(得分:11)
我认为你总是需要通过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;
}
}
以下是编译的步骤:
现在,您可以从VBA添加对SampleLibrary.tlb的引用,并使用SampleWidget类。