7

これに関するいくつかの投稿を見てきましたが、これまでのところ解決策はありません。IKVM経由で .NET DLL に変換する .jar ファイルがあります。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 は .net ライブラリであるため、.dll を直接受け入れませんでした。タイプ ライブラリを作成しようとしました。

regasm /codebase /tlb mytest.dll

これにより、適切な .tlb ファイルが作成されましたが、ライブラリに厳密な名前が付けられていないという警告がスローされました。

6.) 次に、.tlb を参照として vba エディターにロードしました。これは機能しますが、メソッドにアクセスしようとすると何も表示されません。同様に、ライブラリのオブジェクト ビューアを見ると、2 つのクラスが表示されますが、それらのクラスのメンバーは表示されません。

さらに、おそらく VBA 内の IKVM.OpenJDK.Core.dll も参照する必要があると思います。ただし、.NET .dll であるため、それもできません。

.jar ファイルを VBA で使用できるものに変換することに成功した人はいますか?

4

1 に答える 1

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;
  }
}

コンパイルする手順は次のとおりです。

  1. IKVM.Runtime.dllとすべてのIKVM.OpenJDK。*。dllを現在のディレクトリまたはGACにコピーします。
  2. 「ikvmstubmscorlib」を実行してmscorlib.jarを生成します。
  3. 上記のコードを含むSampleWidget.javaという名前のJavaソースを作成します。
  4. javac-cpmscorlib.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クラスを使用できます。

于 2013-02-20T09:04:44.627 に答える