मैं एक साधारण नेट dll साथ VS2010 सी # है कि एक वर्ग के 2 स्थिर सदस्योंसी ++/CLI-> सी # त्रुटि C2526: सी लिंकेज समारोह सी वापस नहीं लौट सकते ++ वर्ग
public class Polygon
{
public static void Test(int test) {}
public static void Test(List<int> test) {}
}
मैं तो एक कंसोल बनाया को उजागर करता है बनाया है VS2010 सी से एप्लिकेशन ++ और
extern "C" void TestMe()
{
Polygon::Test(3);
}
संदर्भ और संकलन जोड़ा जा रहा है मुझे इस त्रुटि देता है _tmain ऊपर इस समारोह जोड़ा
1>WierdError.cpp(9): error C2526: 'System::Collections::Generic::List<T>::GetEnumerator' : C linkage function cannot return C++ class 'System::Collections::Generic::List<T>::Enumerator'
1> with
1> [
1> T=int
1> ]
1> WierdError.cpp(9) : see declaration of 'System::Collections::Generic::List<T>::Enumerator'
1> with
1> [
1> T=int
1> ]
1> WierdError.cpp(9) : see reference to class generic instantiation 'System::Collections::Generic::List<T>' being compiled
1> with
1> [
1> T=int
1> ]
मेरी टिप्पणियों में से कुछ:
- यह सफलतापूर्वक संकलित अगर मैं हटाने extern "सी"
- यह सफलतापूर्वक संकलित अगर मैं नाम बदलने
Test(List<int> test)
Test2(List<int> test)
करने के लिए
मेरा प्रश्न है, क्या गलत हो रहा है और कैसे इसे C++ पक्ष से ठीक करने के लिए।
मेरा वर्तमान कामकाज सी # में विधि का नाम बदलना है, लेकिन मुझे ऐसा करने की ज़रूरत नहीं है, मुझे लगता है कि मेरे सी ++ प्रोजेक्ट में एक सेटिंग हो सकती है।
संपादित करें:
मैं सी ++ में एक बेहतर वैकल्पिक हल मिल गया है, ऐसा लगता है कि मैं एक समारोह में नेट कॉल लपेट कर सकते हैं।
void wrapper()
{
Polygon::Test(3);
}
extern "C" void TestMe()
{
wrapper();
}
ऐसा करने के लिए मूर्खतापूर्ण लगता है, मुझे आश्चर्य है कि यह एक कंपाइलर बग है या नहीं? मुझे इस तरह के तरीकों का उपयोग करने से क्या डर लगता है और चिंता करने की ज़रूरत है कि सी # डेवलपर बाद के बिंदु पर ऐसी स्थिर विधि जोड़ सकता है और सी ++ बनाता है।
मैं इस त्रुटि को दोबारा नहीं कर सकता। सी ++/सीएलआई प्रोजेक्ट बनाने के लिए आपने किस प्रोजेक्ट टेम्पलेट का उपयोग किया था? मुझे संदेह है कि आपने गलत चुना है, क्योंकि सीएलआर प्रोजेक्ट टेम्पलेट्स में से कोई भी '_tmain' एंट्री पॉइंट परिभाषित नहीं करता है। – ildjarn
मुझे लगता है कि यह Win32 कंसोल था, फिर मैं सेटिंग्स में गया और जोड़ा/clr समर्थन, मैं कल सत्यापित करूँगा। – PeskyGnat
http://www.youtube.com/watch?v=QUuQ-BdHflk - तेज़ आगे 2:08 है जो मैंने किया था। – PeskyGnat