2009-07-31 28 views
6

मेरे पास एक प्रकार की लाइब्रेरी वाला वीसी ++ COM घटक है।इंटरऑप असेंबली में नाम गलत पूंजीकरण

[ 
    object, 
    uuid(ActualUuidHere), 
    dual, 
    nonextensible, 
    oleautomation, 
    hidden, 
    helpstring(ActualHelpStringHere) 
] 
interface IWorkflow : IDispatch 
{ 
    //irrelevant properties here  
} 

[ 
    uuid(ActualClassIdHere), 
    noncreatable 
] 
coclass Workflow { 
    [default] interface IWorkflow; 
}; 

आदेश मैं सी # परियोजना के लिए एक संदर्भ जोड़ने के एक सी # आवेदन और एक इंटरॉप विधानसभा से घटक का उपभोग करने में उत्पन्न होता है: इस घटक के प्रकार के पुस्तकालय एक अंतरफलक और एक सह वर्ग की घोषणा की।

विजुअल स्टूडियो 2003 के ऑब्जेक्ट ब्राउज़र मैं देख रहा हूँ इंटरॉप जिसमें में:

public abstract interface IWorkflow; 
public abstract interface workflow : IWorkflow; 
public class workflowClass : System.Object; 

यह स्पष्ट है कि कि किसी कारण से वर्ग और इंटरफ़ेस का नाम पूंजीकरण में मतभेद है। यह उसी प्रकार की लाइब्रेरी में घोषित अन्य 20+ इंटरफेस के लिए नहीं होता है - उनके लिए ISomethingSomething और SomethingClass से मेल खाता है।

मैंने परियोजना की .idl फ़ाइलों को देखा है - पहचानकर्ता Workflow कहीं और नहीं उपयोग किया जाता है।

इस अजीब व्यवहार का कारण क्या है और यह कैसे काम किया जा सकता है?

उत्तर

6

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

ऐसा क्यों होता है? टाइप लाइब्रेरी टूल्स में एक बग है जहां वे आंतरिक रूप से केस असंवेदनशील फैशन में पहचानकर्ता स्टोर करेंगे। तो यदि आपके पास अलग-अलग capatilization के साथ दो नाम हैं तो वे एक ही स्लॉट में संग्रहीत किया जाएगा। इन नामों का उपयोग सीधे पीढ़ी के समय में किया जाता है ताकि अलग आवरण उत्सर्जित हो जाए।

इस पर काम करने का तरीका अलग-अलग नाम बनाकर संघर्ष को रोकने के लिए है।

+0

प्रोजेक्ट में सभी आईडीएल फाइलों के माध्यम से देखा - नाम कहीं और नहीं उपयोग किया जाता है। – sharptooth

+0

धन्यवाद। मुझे यह समस्या हो रही थी, और आपके समाधान ने इसे ठीक कर दिया। – Grokys

1

CodePlex पर नए अनुकूलन tlbimp उपकरण पर एक नजर डालें:

http://blogs.msdn.com/clrteam/archive/2009/03/19/new-tlbimp-release-on-codeplex-full-customization-of-interop-assemblies.aspx

+0

इस आलेख का यूआरएल इस प्रकार बदला गया था: https://blogs.msdn.microsoft.com/dotnet/2009/03/19/new-tlbimp-release-on-codeplex-full-customization-of-interop- असेंबली/ –

2

युप - यह वास्तव में होता है। हमारे पास किसी दिए गए नाम के साथ एक संपत्ति थी, और एक अन्य विधि के पैरामीटर को बदल दिया गया था और फिर टक्कर लगी थी। वही नाम, अलग आवरण - व्हाम। चीजों को और भी दिलचस्प बनाने के लिए, हमारे पास दो निर्माण लक्ष्य हैं, और निर्माण आदेश के बारे में कुछ अलग-अलग था, जिसे हमने एक में पूंजीकरण प्राप्त किया - जो काम करता था - और दूसरे में - जो असफल रहा। असली मजा जब दोनों परियोजनाएं एक ही स्रोत और। एसएलएन फाइलों, आदि की जांच करती हैं। एक विस्फोट ट्रैकिंग क्या है।

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