2012-11-21 9 views
5

मैं सी #, जो तब निम्नलिखित तरीके से VBA से कहा जा सकता है का उपयोग कर एक DLL बनाना चाहते हैं -सी # का उपयोग कर अप्रबंधित डीएलएल कैसे बनाएं?

Private Declare Function invokePath Lib "\\shared_computer\Projects\somedll\myDLL.dll" (ByVal strUName As String, ByVal strSFile As String) As String 

विचार, अगर DLL के रास्ते बदल गया है मैं केवल में पथ अद्यतन करने की आवश्यकता है निजी घोषणा समारोह लाइन ....

मैंने इसके लिए बहुत कुछ खोजा है, और यह भी सुनिश्चित नहीं है कि यह व्यवस्था संभव है - जहां हम संदर्भ या पंजीकरण के बिना किसी नेटवर्क पथ से डीएलएल फ़ंक्शन को कॉल कर सकते हैं।

उत्तर

3

आप सी # के साथ अप्रबंधित DLLs नहीं बना सकते हैं, क्योंकि सी # केवल .NET भाषा है। सी ++ का प्रयोग करें।

अप्रबंधित कोड (उदाहरण के लिए वीबीए) से .NET DLL का उपयोग करने का एकमात्र तरीका COM इंटरऑप का उपयोग करना है।

+0

हालांकि वह शीर्षक में "अप्रबंधित" कहता है, प्रश्न के शरीर में अनुरोध (यानी वीबीए से बुलाया जाने वाला सी # डीएलएल) बहुत अच्छी तरह से पूरा हो सकता है। –

+2

हां, लेकिन जैसा कि आप देखते हैं, मैंने यह नहीं कहा कि वीबीए से .NET DLL तक पहुंचना असंभव है। सवाल यह है कि, "सी # में अप्रबंधित डीएलएल कैसे बनाएं" - और यह संभव नहीं है। –

+0

क्या निजी घोषणा समारोह का उपयोग कर सी # में बनाए गए डीएल को एक्सेस करना संभव है। \\ shared_computer \ Projects \ somedll \ myDLL.dll "(स्ट्रिंग के रूप में ByVal struname, स्ट्रिंग के रूप में ByVal strSFile) स्ट्रिंग के रूप में और संदर्भ के रूप में नहीं जोड़ना संभव है? पथ को लचीला रखने की आवश्यकता है। यदि यह संभव नहीं है, तो हमें सी ++ पर स्विच करना होगा। –

0

चेक पी/यहां आमंत्रित करें, आलेख में अप्रबंधित प्रकारों, लघु कोड उदाहरणों (सी # में), युक्तियों और संसाधनों की एक सूची में अनुवाद करने का अनुवाद करने के लिए एक उपयोगी तालिका है।

Essential P/Invoke

+2

पी/Invoke उपयोगी होगा अगर वह सी # से एक अप्रबंधित DLL का उपयोग करना चाहता था। लेकिन वह दूसरी तरफ जाना चाहता है। वीबीए में पी/इनवॉक जैसी कोई चीज नहीं है। –

0

सी # Dll कार्यों है कि किसी भी अन्य गैर CLR कोड से कहा जा सकता है निर्यात नहीं कर सकते।

यह संभव नहीं है।

10

वास्तव में आप कर सकते हैं।

[DllExport("GenerateSomehting", CallingConvention = CallingConvention.Cdecl)] 
public static int GenerateSomehting(int somevalue, ref IntPtr pointer) 

और यह सिर्फ किसी भी अन्य अप्रबंधित dll की तरह फोन: बाहर unmanagedexports यह एक पूरा चलना के माध्यम से है की जाँच करें और आप इस तरह प्रवेश बिंदुओं बनाने में सक्षम हो जाएगा।

[DllImport("MyGenerator.dll", CallingConvention = CallingConvention.Cdecl)] 
static extern int GenerateSomehting(int somevalue, ref IntPtr pointer); 
+0

क्या यह इसे उत्पन्न करने के बाद .NET के बिना किसी भी स्थान के साथ चला सकता है? – qakmak

+0

हां, मैं इस तरह से डीएलएल का निर्माण करता था ताकि डेल्फी इसके साथ संवाद कर सके। – Samball