2012-02-24 20 views
5

से एडोकोनक्शन पास करें मैं एक वीबीए मैक्रो में एक COM ऑब्जेक्ट बनाना चाहता हूं और फिर इसे डेल्फी डीएलएल (डी 200 9) में भेजता हूं। डेल्फी में मेरी प्रक्रिया की घोषणा किस तरह दिखनी चाहिए?वीबीए से डेल्फी

पृष्ठभूमि: मैं उम्मीद कर रहा हूँ (उम्मीद) VBA मैक्रो: COM ऑब्जेक्ट बनाने, आह्वान डेल्फी DLL, , डेल्फी DLL प्रक्रिया के लिए COM वस्तु पारित जब तक डेल्फी DLL बंद कर देता है जिंदा रहने स्वयं (डीएलएल उपयोगकर्ता के साथ बातचीत करने के लिए एम्बेडेड फॉर्म होगा)।

मुझे लगता है कि मुझे वीबीए मैक्रो को यह जानने के लिए कॉलबैक फ़ंक्शन बनाने की आवश्यकता होगी कि मुझे ऐसा किया गया है ताकि यह साफ हो सके लेकिन मैं इस प्रश्न के स्वतंत्र रूप से उस पर काम करूंगा।

अद्यतन अधिक विशेष रूप से: निर्यातित कार्य घोषणा डेल्फी डीएलएल के लिए क्या होनी चाहिए।

उत्तर

8

आप तो TADOConnection उदाहरण बना सकते हैं और नए इंटरफ़ेस लिंक

library Project1; 
uses ADODB; 

{$R *.res} 

    procedure SetConnection(aDBConnection : _Connection); stdcall; 
    var connect : TADOConnection; 
    begin 
     connect := TADOConnection.Create(nil); 
     try 
      connect.ConnectionObject := aDBConnection; 
      //here you can use your connection 
     finally 
      connect.Free(); 
     end; 
    end; 


exports SetConnection name 'SetDBConnection'; 

begin 
end. 

यह stdcall बुला सम्मेलन उपयोग करने के लिए बेहतर है के साथ ConnectionObject की जगह ADO कनेक्शन इंटरफ़ेस लिंक _Connection डेल्फी प्रक्रिया को पारित करने के लिए की है। export कीवर्ड setConnection proc का उपयोग कर SetDBConnection नाम के साथ uotside से उपलब्ध है, तो आप LoadLibrary और getProcAddress कर सकते हैं अपने प्रवेश बिंदु को खोजने के लिए (वास्तव में मैं VBA पता नहीं है तो मैं नहीं कह सकता कि यह कैसे उपयोग करते हुए पुस्तकालय लोड करने के लिए)

+0

धन्यवाद इसके लिए - यह अगले चरण के लिए सहायक होगा। मैंने यह स्पष्ट करने के लिए अपने मूल प्रश्न में जोड़ा कि मैं ** निर्यात ** घोषणा की तलाश में हूं। –

+0

@SilentD, मैंने 'निर्यात' भाग – teran

+1

के साथ कोड जोड़ा है VBA में 'LoadLibrary' /' GetProcAddress' की कोई आवश्यकता नहीं है। आप 'घोषणा' का उपयोग करेंगे। लेकिन 'stdcall' आवश्यक है क्योंकि यह सब वीबीए जानता है। –