2013-02-19 8 views
7

Widziałem kilka postów na ten temat, ale do tej pory nie widziałem żadnych rozwiązań. Mam plik .jar, który konwertuję do biblioteki .NET DLL przez IKVM. Próbuję dowiedzieć się, jak udostępnić metody w DLL w środowisku excel VBA. tutaj są szczegóły.Jak utworzyć .dll utworzone przy widocznym kodzie IKVM?

1.) zainstalowany IKVM & zarejestrowany to DLL do GAC

2.) prowadził iKVM aby utworzyć .NET .dll (mytest.dll)

ikvmc mytest.jar 

3.) zarejestrowany nowy .dll

regasm mytest.dll 

4.) Stąd i stworzył projekt VB.NET i dodał mytest.dll i IKVM.OpenJDK.Core.dll jako odniesienia do projektu. Mam wtedy dostęp do metod w. Dll w .NET. To jest świetne!

5.) to, co naprawdę chcę zrobić, to móc również użyć .dll w VBA. Początkowo vba nie zaakceptowałby pliku .dll bezpośrednio, ponieważ jest biblioteką .net. Starałem się stworzyć bibliotekę typów:

regasm /codebase /tlb mytest.dll 

Ten utworzony plik .tlb który jest miły, ale to nie rzucać się ostrzeżenie o bibliotece nie są silnie nazwie.

6.) Następnie załadowałem plik .tlb jako odniesienie w edytorze vba. Działa to jednak, gdy próbuję uzyskać dostęp do metod nic się nie wyświetla. Podobnie, jeśli zajrzę do przeglądarki obiektów dla mojej biblioteki, widzę moje dwie klasy, ale nie członków tych klas.

Dodatkowo, wyobrażam sobie, że prawdopodobnie potrzebuję również jakoś odwołać się do pliku IKVM.OpenJDK.Core.dll również w języku VBA. Jednak nie mogę tego zrobić, ponieważ jest to .NET .dll.

Czy ktoś dokonał konwersji pliku .jar na coś, co może być używane z VBA?

Odpowiedz

11

Myślę, że zawsze trzeba wyraźnie zaznaczyć klasę, aby była możliwa do użycia przez interfejs COM. Oto przykład klasy Java, który jest użyteczny z VBA:

import cli.System.Runtime.InteropServices.*; 

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

Oto kroki do kompilacji.

  1. Kopiowanie IKVM.Runtime.dll i wszystko IKVM.OpenJDK * dll Into the. aktualny katalog lub GAC.
  2. Uruchom "ikvmstub mscorlib", aby wygenerować plik mscorlib.jar.
  3. Utwórz źródło Java o nazwie SampleWidget.java zawierające powyższy kod.
  4. javac -cp mscorlib.jar ;. SampleWidget.java
  5. ikvmc wymeldowanie: SampleLibrary.dll SampleWidget.class -R: mscorlib.dll
  6. tlbexp SampleLibrary.dll
  7. regasm/codebase SampleLibrary.dll (ten krok wymaga praw administratora)

Teraz możesz dodać odwołanie do SampleLibrary.tlb z VBA i użyć klasy SampleWidget.

+0

To całkowicie działało. Dziękuję bardzo za odpowiedź! – user2088580

Powiązane problemy