2017-10-18 52 views
6

से .NET कोर विधि मेरे पास 2 घटक हैं:
- नेट कोर एप्लिकेशन उबंटू ओएस पर चल रहा है।
- सी ++ साझा लाइब्रेरी (.so)कॉल (सी #) सी ++

अब मैं चाहता हूँ सी ++ घटक नेट कोर विधि कॉल करने के लिए, या तो सेल्सियस के लिए इंटरफ़ेस गुजर ++ घटक जो इस इंटरफ़ेस का उपयोग करेगा विधि कार्यान्वयन या एक पैरामीटर के रूप गुजर विधि कालबैक में सक्षम होने के लिए सी ++ घटक के लिए।

उच्च स्तर उदाहरण मैं क्या हासिल करने की कोशिश कर रहा हूँ:
सी # घटक:

public interface IDevice 
{ 
    void OnDataAvailable(string data); 
} 

public class Device: IDevice 
{ 
    [DllImport("sampleCPPLibrary.so")] 
    private static extern int SetReceiver(IDevice receiver); 
    public void OnDataAvailable(string data) 
    { 
     Console.WriteLine(data); 
    } 
    public void Initialize() 
    { 
     SetReceiver(IDevice(this)) 
    } 
} 

सी ++ घटक:

extern "C" { 
void SetReceiver(IReceiver * receiver) 
{ 
    receiver->OnDataAvailable(10); 
} 
} 

मूल रूप से, मैं क्या करने की कोशिश कर रहा हूँ पारित करने के लिए बस है सी ++ घटक के लिए कुछ प्रकार का "कॉलबैक" और सी ++ घटक में कुछ घटना होने पर यह "कॉलबैक" कॉल करें।

+0

मुझे संदेह है कि आप इसे इंटरफ़ेस के साथ कर सकते हैं (क्योंकि इंटरफ़ेस का मतलब है कि कुछ ऑब्जेक्ट जो इसे कार्यान्वित करता है)। मैं नेट कोर में ज्यादा नहीं हूं, लेकिन जांचें कि ['मार्शल.गेटडिलेगेटफोरफंक्शन पॉइंटर'] (https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.getdelegateforfunctionpointer?view = netframework-4.7.1 # System_Runtime_InteropServices_Marshal_GetDelegateForFunctionPointer_System_IntPtr_System_Type_) आपके लिए उपलब्ध है। आप सी-स्टाइल कॉलबैक का आह्वान करने के लिए इसका उपयोग करने का प्रयास कर सकते हैं। –

उत्तर

1

टिप्पणियों से See this issue देखें मैंने कोड बनाया जहां सी # कॉल सी और कॉलबैक प्रतिनिधि को देता है। इस प्रकार सी से तो यह सी # कहता है, और अतिरिक्त int प्रकार तर्क पास करता है। काम करने के उदाहरण के लिए See comments here from endurox project, और संलग्न c-callback.tar.gz।

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