2010-05-20 15 views
7

मुझे पता है कि मेरे सी कोड को एक डीएल में संकलित करना संभव है, और फिर उस कोड को कॉल करने के लिए पी/Invoke का उपयोग करें।क्या सी # प्रोजेक्ट में सी कोड एम्बेड करना संभव है?

अगर यह संभव हो गया था सी कोड मेरी कोड, शायद केवल एक ही वर्ग के लिए उपलब्ध में सीधे एम्बेडेड का एक हिस्सा है करने के लिए मैं क्या सोच ...

कुछ इस (गैर काम कर रहे) के उदाहरण की तरह:

public class MyClass { 
    extern "C" { 
     int do_something_in_c(int i) { 
      return i*2; 
     } 
    } 

    public int DoSomething(int value) { 
     return do_something_in_c(value); 
    } 
} 

मैं विजुअल स्टूडियो 2008 का उपयोग करके कुछ घंटों तक कोशिश कर रहा हूं, लेकिन मुझे कहीं भी नहीं मिल रहा है, और मुझे संदेह है कि यह वास्तव में संभव नहीं है। कोई भी इस बात की पुष्टि या इस बात से इंकार कर सकता हैं?

धन्यवाद।

उत्तर

9

यह एक मिश्रित-मोड विधानसभा बनाने के लिए संभव है के साथ संगत (जो है, एक दोनों में कामयाब रहे और मूल कोड है) है, लेकिन केवल सी ++/सीएलआई कंपाइलर इनमें से एक का उत्पादन कर सकते हैं। आप जो करना चाहते हैं वह सी # कंपाइलर द्वारा समर्थित नहीं है।

3

यह संभव नहीं है। सी # unsafe code (संकेत) का समर्थन करता है है, ऐसा नहीं पीछे की ओर सी या सी ++

0

आईएमएचओ, यह संभव नहीं है, क्योंकि सी एक असुरक्षित और अप्रबंधित भाषा है। इसके अलावा, सी # में पॉइंटर्स को छोड़कर सी की सभी महत्वपूर्ण विशेषताएं हैं।

+1

सी # समर्थन संकेत करता है - http://msdn.microsoft.com/ एन-यूएस/लाइब्रेरी/aa664769 (v = VS.71) .aspx –

+0

मेरा बुरा .. लेकिन मैंने इसे असुरक्षित होने पर विचार नहीं किया। – Salil

2

आप लिख सकते हैं और एक सामान्य (non-.NET) विधानसभा के रूप में अपने सी कोड संकलन कर सकते हैं, तो पी/यह आह्वान:

[DllImport ("mylib.dll")] 
private static extern int do_something_in_c(int i); 

public int DoSomething(int value) 
{ 
    return do_something_in_c(value); 
} 
+1

ओपी इस सवाल की पहली पंक्ति में इसका उल्लेख करता है। –

+0

हां। मैंने इसे मूल रूप से किया था। लेकिन यह किसी भी तरह से सुरुचिपूर्ण लग रहा था। :) – Jonathan

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