2013-02-19 47 views
7

मैंने इस पर कुछ पोस्ट देखी हैं, लेकिन मैंने अभी तक कोई समाधान नहीं देखा है। मेरे पास एक .jar फ़ाइल है जिसे मैं IKVM के माध्यम से .NET DLL में परिवर्तित कर रहा हूं। मैं एक्सेल वीबीए पर्यावरण के अंदर उपलब्ध डीएलएल में विधियों को कैसे बनाना है, यह जानने का प्रयास कर रहा हूं। यहाँ विवरण हैं।मैं IKVM कॉम के साथ बनाया गया .dll कैसे बना सकता हूं?

1.) स्थापित iKVM & पंजीकृत यह DLL के GAC

2. करने के लिए) एक .net .dll (mytest.dll बनाने के लिए) iKVM भाग गया

ikvmc mytest.jar 

3.) पंजीकृत नई .dll

regasm mytest.dll 

4.) यहाँ से मैं एक VB.NET प्रोजेक्ट बनाया और इस परियोजना के लिए संदर्भ के रूप में mytest.dll और IKVM.OpenJDK.Core.dll गयी। मैं फिर .NET में .dll के भीतर विधियों तक पहुंचने में सक्षम हूं। यह भी खूब रही!

5.) जो मैं वास्तव में करना चाहता हूं वह वीबीए में .dll का उपयोग करने में सक्षम है। प्रारंभ में vba सीधे .dll को स्वीकार नहीं करेगा क्योंकि यह एक .net लाइब्रेरी है। मैं एक प्रकार लायब्रेरी बनाने का प्रयास किया:

regasm /codebase /tlb mytest.dll 

यह एक .tlb फ़ाइल जो अच्छा है बनाया है, लेकिन यह नहीं दृढ़ता से नामित होने के पुस्तकालय के बारे में चेतावनी फेंक था।

6.) तो मैंने अपने vba संपादक में संदर्भ के रूप में .tlb लोड किया। यह काम करता है, हालांकि जब मैं विधियों तक पहुंचने का प्रयास करता हूं तो कुछ भी दिखाई नहीं देता है। इसी प्रकार यदि मैं अपनी लाइब्रेरी के लिए ऑब्जेक्ट व्यूअर में देखता हूं तो मैं अपने दो वर्ग देख सकता हूं लेकिन उन वर्गों के सदस्यों को नहीं देख सकता।

इसके अतिरिक्त, मुझे कल्पना है कि मुझे संभवतः वीबीए के अंदर IKVM.OpenJDK.Core.dll को संदर्भित करने की भी आवश्यकता है। हालांकि मैं ऐसा नहीं कर सकता क्योंकि यह एक .NET .dll है।

क्या किसी ने भी किसी .jar फ़ाइल को वीबीए के साथ उपयोग करने में सफलतापूर्वक परिवर्तित कर दिया है?

उत्तर

11

मुझे लगता है कि आपको हमेशा COM इंटरऑप के माध्यम से उपयोग करने योग्य वर्ग को स्पष्ट रूप से चिह्नित करने की आवश्यकता है।

import cli.System.Runtime.InteropServices.*; 

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

यहाँ संकलित करने के लिए कदम हैं:: यहाँ एक जावा वर्ग का एक उदाहरण है कि VBA से प्रयोग करने योग्य है।

  1. कॉपी IKVM.Runtime.dll और सभी IKVM.OpenJDK * में dll। वर्तमान निर्देशिका या जीएसी।
  2. mscorlib.jar उत्पन्न करने के लिए "ikvmstub mscorlib" चलाएं।
  3. ऊपर दिए गए कोड वाले SampleWidget.java नामक जावा स्रोत बनाएं।
  4. javac -cp mscorlib.jar ;. SampleWidget.java
  5. ikvmc आउट: SampleLibrary.dll SampleWidget.class -r: mscorlib.dll
  6. SampleLibrary.dll tlbexp
  7. regasm/codebase SampleLibrary.dll (यह चरण व्यवस्थापक अधिकार की जरूरत है)

अब आप VBA से SampleLibrary.tlb का संदर्भ जोड़ सकते हैं और नमूनाविड्ज क्लास का उपयोग कर सकते हैं।

+0

यह पूरी तरह से काम किया। आपके उत्तर के लिए बहुत बहुत धन्यवाद! – user2088580