मैं इस उत्तर को अपेक्षाकृत संक्षिप्त रखने जा रहा हूं क्योंकि इनमें से अधिकांश FFI documentation में शामिल है।
आप उन्हें नाम सी में कार्य foreign export
के रूप में घोषित किया जाना चाहिए द्वारा फोन करके कार्यों का उपयोग कर सकते हैं और यह हास्केल में एक सी मॉड्यूल में परिभाषित कार्यों फोन करने के लिए foreign import
वाक्य रचना समानताएं। सी में, आपको फ़ंक्शन को extern
के रूप में घोषित करने की आवश्यकता होगी और इसे सामान्य प्रकार का हस्ताक्षर दें।
आपका interact
समारोह सीधे घोषित नहीं किया जा सकता यह प्रकार है कि सी में परिभाषित नहीं कर रहे हैं आप को परिभाषित करने और एक संबंधित समारोह है कि हास्केल में interact
कॉल लिख सकते हैं संदर्भ देता है क्योंकि: तो
interact_hs :: FunPtr (CString -> CString) -> IO()
इस समारोह होगा interact
पर कॉल करने के लिए अपने तर्क (रैपिंग के साथ) का उपयोग करना होगा।
सी में इस समारोह तो दिखाई देता है:
extern void interact_hs(char*(*f)(char*));
या यह कुछ ऐसा है, मेरे समारोह सूचक वाक्य रचना जंग लगी है।
वास्तव में सी से इस फ़ंक्शन को कॉल करने के लिए, आपको हास्केल रनटाइम (प्रलेखन में शामिल) को प्रारंभ करना होगा, फिर फ़ंक्शन को कॉल करें, जिस पर निष्पादन का बिंदु नियंत्रण हास्केल में गुजरता है। एक बार जब समारोह पूरा करता है और रिटर्न, निष्पादन के नियंत्रण सी में वापस FFI के साथ काम करने के लिए
अन्य उपयोगी संसाधनों से गुजरता है:
अन्य उपयोगी लिंक का सुझाव देने के लिए स्वतंत्र महसूस करें!
क्या आप हास्केल से सीस्क, या सी से हास्केल को कॉल करना चाहते हैं? – acomar
@acomar मेरा मानना है कि ओपी सी – duplode
@ डुपलोड से हास्केल को कॉल करना चाहता है बिल्कुल, मैं सी/सी ++ – Simplex