2013-02-19 7 views
7

私はこれについていくつかの記事を見てきましたが、私はこれまでのところ解決策を見ていません。私はIKVM経由で.NET DLLに変換している.jarファイルを持っています。 ExcelのVBA環境でDLLのメソッドを利用できるようにする方法を理解しようとしています。ここに詳細があります。IKVM comで作成した.dllを表示するにはどうすればよいですか?

1))が登録され、それがGAC

2にDLLのだ)A .NETの.dll(mytest.dll)

ikvmc mytest.jar 

3を作成するために、IKVMを走ったIKVM &インストールされた新しい登録しました.dllが

regasm mytest.dll 

4.)ここから私はVB.NETのプロジェクトを作成し、プロジェクトへの参照としてmytest.dllとIKVM.OpenJDK.Core.dllを追加しました。私はその後、.NETの.dll内のメソッドにアクセスできます。これは素晴らしい!

5.)私が実際にやりたいことは、VBAでも.dllを使用できることです。当初、vbaは.netライブラリであるため、.dllを直接受け入れませんでした。これはいいです.TLBファイルを作成し

regasm /codebase /tlb mytest.dll 

が、それは強く命名されていないライブラリに関する警告を投げるました:私は、タイプライブラリを作成しようとしました。

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

また、おそらくVBA内のIKVM.OpenJDK.Core.dllも何とか参照する必要があると思います。しかし、それは.NETの.dllなので、私はそれを行うことはできません。

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

答えて

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. "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 /コードベースSampleLibrary.dll(このステップは、管理者権限を必要とする)

これで、VBAからSampleLibrary.tlbへの参照を追加し、SampleWidgetクラスを使用できます。

+0

これは完全に機能しました。あなたのお返事ありがとうございます! – user2088580

関連する問題