2013-02-19 19 views
7

Bu konuda birkaç mesaj gördüm, ancak şimdiye kadar hiç bir çözüm görmedim. IKVM aracılığıyla bir .NET DLL dosyasına dönüştürdüğüm bir .jar dosyası var. DLL'de excel VBA ortamında kullanılabilir yöntemleri nasıl yapılacağını anlamaya çalışıyorum. detaylar burada.IKVM com ile oluşturulan bir .dll dosyasını nasıl görünür yaparım?

1.)) IKVM & o DLL

2. GAC

içelim kayıtlı yüklü) bir .net .dll (MyTest.dll oluşturmak için IKVM ran

ikvmc mytest.jar 

3. ) yeni tescil .dll

regasm mytest.dll 

4.) buradan i VB.NET projesini oluşturdu ve projeye referans olarak myTest.dll ve IKVM.OpenJDK.Core.dll ekledi. Sonra .NET içindeki .dll içindeki yöntemlere erişebilirim. Bu harika!

5.) ne gerçekten yapmak istediğim de VBA .dll kullanabilecektir olduğunu. Başlangıçta vba .dll dosyasını doğrudan bir .net kitaplığı olarak kabul etmez. Bir tür kitaplığı oluşturmak için çalıştı:

regasm /codebase /tlb mytest.dll 

Bu güzel bir .tlb dosyasını oluşturdu, ancak bu değil kesin adlandırılmış olan kütüphanede hakkında bir uyarı atmak yaptı.

6.) Sonra vb editörümde .tlb'yi referans olarak yükledim. Bu işe yarıyor, ancak hiçbir şey ortaya çıkmayacak yöntemlere erişmeye çalıştığımda. Benzer şekilde, kütüphanem için nesne görüntüleyicisine bakarsak iki sınıfımı görebilirim, ancak bu sınıfların üyelerini göremiyorum.

Ayrıca, ben belki de her nasılsa yanı VBA içindeki IKVM.OpenJDK.Core.dll başvurmak gerekir düşünün. Ancak, bunu .NET .dll olduğu için yapamam.

kimse başarı VBA ile kullanılabilen bir şey bir .jar dosya dönüştürme oldu mu?

cevap

11

Her zaman COM interop üzerinden kullanılabilmesi için bir sınıfı açıkça işaretlemeniz gerektiğini düşünüyorum. İşte

import cli.System.Runtime.InteropServices.*; 

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

derlemek için adımlar şunlardır: İşte VBA kullanılabilir olan bir Java sınıfının bir örneği verilmiştir.

  1. Kopya IKVM.Runtime.dll ve tüm IKVM.OpenJDK * dll. geçerli dizin veya GAC.
  2. mscorlib.jar dosyasını oluşturmak için "ikvmstub mscorlib" komutunu çalıştırın.
  3. Yukarıdaki kodu içeren SampleWidget.java adlı bir Java kaynağı oluşturun.
  4. javac -cp mscorlib.jar; SampleWidget.java
  5. ikvmc -kasa: SampleLibrary.dll SampleWidget.class -r: mscorlib.dll
  6. SampleLibrary.dll (bu adım yönetici hakları gerekir)
  7. SampleLibrary.dll tlbexp
  8. regasm/Codebase

Artık VBA'den SampleLibrary.tlb'ye bir başvuru ekleyebilir ve SampleWidget sınıfını kullanabilirsiniz.

+0

Bu tamamen işe yaradı. Cevabınız için çok teşekkür ederim! – user2088580

İlgili konular