当前位置: 首页 > 面试题库 >

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

施喜
2023-03-14
问题内容

我已经看到了一些关于此的文章,但是到目前为止,我还没有看到任何解决方案。我有一个.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一起使用的文件?


问题答案:

我认为您始终需要通过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类。



 类似资料:
  • 问题内容: 我一直在尝试使用Microsoft Visual Studio 2010来用SWIG为我创建一个DLL。如果您已经完成了此过程,那么您是否愿意提供周到的逐步过程说明?我在网上到处都看了很多,花了很多时间来做。但是我发现的所有教程都已过时或无法正确解释。 我已经与cygwin一起成功完成了此过程;但是正如您所知,cygwin DLL不太实用。 结果,我知道可以一起创建DLL的.i,.cp

  • 我想从CUDA代码()创建一个. dll,以便从外部C程序中使用这个库。经过一些尝试,我只是在. cu文件中留下了一个简单的C函数。代码如下: kernel.cu 内核.h 我首先尝试使用生成一个对象,然后使用创建DLL,如下所示: 它工作正常,并生成。为了测试DLL文件,我编写了一个简单的程序: 编译方式: 结果是执行开始时的内存访问错误。 然而如果我重新命名。cu文件在。C(因为它只是C代码)

  • 我们有以下架构 SQS(源)->SQS轮询器->我们的业务逻辑->Sink,它从SQS中删除消息。 这是一个akka流(我们的业务逻辑有多个阶段)。 现在我们希望通过添加HTTP服务器(而不是Akka HTTP)来扩展这个体系结构。 现在我们的服务也有了路径 我认为https://doc.akka.io/docs/akka/2.5/stream/operators/source/queue.htm

  • 问题内容: 我正在尝试创建一个以验证以下日期时间: 我已经尝试使用以下日期时间格式化程序来验证上述日期: 它适用于所有上述日期罚款,但根据我的要求就应该失败的。 注意:我知道使用以下格式化程序可以达到预期的结果: 但是我想知道,通过改变我们可以达到预期的结果吗? 为了解析日期,我使用以下方法: 问题答案: 您必须创建一个可选部分(使用和方法),该部分包含小数点后跟1至6位数字: 这将从解析,并引发

  • 问题内容: 有没有一种方法可以在Windows下针对Go v1.7生成dll? 我尝试了经典 但是得到 Windows / amd64不支持-buildmode = shared 更新 好的,我知道了。对于那些感兴趣的人:https : //groups.google.com/forum/#!topic/golang- dev/ckFZAZbnjzU 问题答案: 从Go 1.10开始,Window

  • 问题内容: 我试图在这个问题中使用答案,但不能使其起作用:如何使用Python的ElementTree创建“虚拟根”? 这是我的代码: 当我打开生成的“ myfile.tmx”文件时,它包含以下内容: 我想念什么?还是有更好的工具? 问题答案: 您可以使用lxml及其功能: =>