2011-02-15 25 views
19

मैं सी # के लिए नया हूं और मैं डीएलएल के उपयोग को सीखने की कोशिश कर रहा हूं। मैं अपनी ऑब्जेक्ट को डीएलएल में लपेटने की कोशिश कर रहा हूं, और फिर इसे अपने प्रोग्राम में इस्तेमाल करता हूं।डीएलएल से कॉल फ़ंक्शन?

public class Foo // its in the DLL 
{ 
    public int ID; 
    public void Bar() 
    { 
     SomeMethodInMyProgram(); 
    } 
} 

तो मैं क्योंकि संकलक पता नहीं है क्या SomeMethodInMyProgram() एक DLL को यह शामिल करने का प्रयास लेकिन मैं नहीं कर सकता।

मुझे यह पसंद उपयोग करना चाहते हैं:

class Program // my program, using DLL 
{ 
    static void Main(string[] args) 
    { 
     Foo test = new Foo(); 
     test.Bar(); 
    } 
} 

उत्तर

20

समाधान एक्सप्लोरर के माध्यम से DLL जोड़ें - सही संदर्भों पर क्लिक करें -> संदर्भ जोड़ने फिर आपको "ब्राउज़ करें" डीएलएल - तो यह उपलब्ध होना चाहिए।

4

आप वास्तव में रन समय आपके आवेदन, इस प्रकार DLL के गतिशील हिस्से में DLL लोड करने के लिए की जरूरत है। आपको हेडर फ़ाइल की भी आवश्यकता है जो परिभाषित करता है कि डीएलएल में कौन से फ़ंक्शन हैं, इसलिए आपका संकलन जानता है कि कौन से फ़ंक्शंस को परिभाषित किया गया है। मेरे ज्ञान यहाँ सी ++ पर यह इतना कैसे सी # मुझे यकीन है कि करने के लिए नहीं कर रहा हूँ के लिए काम करता है आधारित है, लेकिन यह ऐसा ही कुछ हो जाएगा ...

+3

सी # इस संबंध में सी \ सी ++ के लिए काफी अलग है। .NET रनटाइम .dll से पर्याप्त जानकारी निकाल सकता है यह निर्धारित करने के लिए कि विधि हस्ताक्षर क्या हैं (सी # में कोई शीर्षलेख फ़ाइलें नहीं हैं) – Jimmy

+2

आह, ठीक है। erm ... – thecoshman

28

किस प्रकार के डीएलएल पर निर्भर करता है। क्या यह .NET में बनाया गया है? यदि यह अप्रबंधित कोड है तो यहां एक उदाहरण है अन्यथा रोब से उत्तर काम करेगा।

अप्रबंधित सी ++ dll उदाहरण:

using System; 
using System.Runtime.InteropServices; 

आप फिर DllImport

[DllImport(@"C:\Cadence\SPB_16.5\tools\bin\mpsc.dll")] 
static extern void mpscExit(); 

या

[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); 

उपयोग करने के लिए उन में से प्रत्येक की आवश्यकता हो सकती है इस तरह कहा जाता है:

// a specific DLL method/function call 
mpscExit(); 
// user32.dll is Microsoft, path not needed 
MessageBox(new IntPtr(0), "Test", "Test Dialog", 0); 
+1

पर ले जाएं लड़का स्पष्ट रूप से एक सरल 'संदर्भ जोड़ें' उत्तर मांग रहा था उत्तर आप क्यों जाएंगे और उन्हें फेंक देंगे। एक नए डेवलपर बाहरी और डीएलआईम्पोर्ट के लिए बल्कि उन्नत हैं। – TheMonkeyMan

+6

वे सामान्य "आसान" तरीके हैं DllImport बहुत आसान है, इस FYI को करने के कई और उन्नत तरीके हैं। –

2

मैं यहां पार्टी के लिए देर हो चुकी हूं लेकिन किसी के लिए अपने बालों को खींचने के लिए इस जवाब को छोड़ रहा हूं। तो मूल रूप से, इस मुद्दे का सामना करते समय मेरे पास वीएस आईडीई की लक्जरी नहीं थी। मैं सीएससी का उपयोग कर cmdline के माध्यम से कोड संकलित करने की कोशिश कर रहा था। एक डीएलएल संदर्भित करने के लिए, बस संकलक ध्वज/आर जोड़ें: PathToDll/NameOfTheDll सीएससी में।

आदेश की तरह

सीएससी/आर दिखेगा: PathToDll/NameOfTheDll/आउट: OutputExeName FileWhichIsReferencingTheDll.cs

FileWhichIsReferencingTheDll.cs में फ़ंक्शन तक पहुंच using namespace AppropriateNameSpace; जोड़ने (फोन करके class.function नाम स्थिर है या कक्षा का ऑब्जेक्ट बनाकर और ऑब्जेक्ट पर फ़ंक्शन का आविष्कार कर रहा है)।

संबंधित मुद्दे