2010-10-22 10 views
24

मैं अपने सी ++/सीएलआई प्रोजेक्ट में मार्शलिंग लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं। #include <msclr/marshal.h> के साथ संकलित होने पर मुझे त्रुटि error C2872: 'IServiceProvider' : ambiguous symbol मिलती है। अधिकांश प्रस्तावों में #include <windows.h> को यहां चलने का सुझाव दिया जा रहा है ->Ambiguous references, लेकिन मेरे पास उन शामिल नहीं हैं। मेरे पास यह है:marshal.h के साथ संकलन में समस्या: त्रुटि C2872: 'IServiceProvider': संदिग्ध प्रतीक

using namespace System; 
using namespace System::Configuration; 
using namespace std; 
#include <msclr/marshal.h> 

मैं इस समस्या को कैसे डीबग कर सकता हूं?

उत्तर

40

आप करते हैं, अप्रत्यक्ष रूप से, marshal.h इसमें शामिल है। यह वैश्विक नामस्थान में बड़ी संख्या में पहचानकर्ताओं को डंप करता है। मैक्रोज़ विशेष रूप से अजीब होते हैं, उनमें से बहुत से ढांचे में उपयोग किए जाने वाले नामों का मिलान करते हैं।

मार्शल क्लास द्वारा marshal.h की कई चीजें भी की जा सकती हैं। लेकिन मैं इसके साथ आपकी मदद नहीं कर सकता, आपने उल्लेख नहीं किया कि आप इसका उपयोग क्यों करना चाहते हैं। आप का उपयोग कर बयान से पहले # शामिल निर्देश रख कर इस विशेष दुर्घटना का समाधान कर सकते हैं:

#include <msclr/marshal.h> 
using namespace System; 
using namespace System::Configuration; 
+0

मैं स्ट्रिंग^को कॉन्स्ट चार * – anivas

+4

मार्शल :: स्ट्रिंगटोको टास्कमेमएन्सी + मार्शल :: FreeCoTaskMem को कन्वर्ट करने की कोशिश कर रहा हूं। –

+0

शीर्षलेख में उपयोग से बचने के लिए सिस्टम :: स्ट्रिंग^का भी उपयोग कर सकते हैं – slater

2

सुनिश्चित करें कि आप केवल है: CLR परियोजना के cpp फ़ाइल में

using namespace System; 

और नहीं शीर्षलेख में सीएलआर क्लास लाइब्रेरी प्रोजेक्ट बनाते समय विजुअल स्टूडियो स्वचालित रूप से हेडर में जोड़ता है। सीपीपी में ही, इसमें "नेमस्पेस का उपयोग करना" से पहले होना चाहिए।

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