2009-08-14 10 views
5

मेरे पास यह प्रतिनिधि सी # में है।मैं एक प्रबंधित सी ++ में सी # प्रतिनिधि समारोह कैसे पास करूं? डीएल?

public delegate string ACSharpDelegate(string message); 

मैं एक प्रबंधित सी ++ .dll कि एक पैरामीटर के रूप में इस प्रतिनिधि को स्वीकार करेंगे तो सी ++ .dll यह कॉल कर सकते हैं कैसे बनाते हैं?

उत्तर

6

परिपत्र संदर्भों से बचने के लिए आपको कम से कम 3 असेंबली की आवश्यकता होगी।

सी # पुस्तकालय:

namespace CSLibrary 
    { 
    public class CSClass 
    { 
     public delegate string ACSharpDelegate (string message); 

     public string Hello (string message) 
     { 
     return string.Format("Hello {0}", message); 
     } 
    } 
    } 

C++/CLI पुस्तकालय (संदर्भ CSLibrary):

using namespace System; 

namespace CPPLibrary { 

    public ref class CPPClass 
    { 
    public: 
    String^ UseDelegate(CSLibrary::CSClass::ACSharpDelegate^ dlg) 
    { 
     String^ dlgReturn = dlg("World"); 
     return String::Format("{0} !", dlgReturn); 
    } 
    }; 
} 

सी # कार्यक्रम (संदर्भ CSLibrary और CPPLibrary):

namespace ConsoleApplication 
{ 
    class Program 
    { 
    static void Main (string [] args) 
    { 
     CSLibrary.CSClass a = new CSLibrary.CSClass(); 
     CSLibrary.CSClass.ACSharpDelegate dlg = new CSLibrary.CSClass.ACSharpDelegate (a.Hello); 

     CPPLibrary.CPPClass b = new CPPLibrary.CPPClass(); 
     String result = b.UseDelegate (dlg); 

     Console.WriteLine (result); 
     Console.Read(); 
    } 
    } 
} 
संबंधित मुद्दे