2016-03-23 7 views
7

में मुझे सी ++ इंटरफेस के भीतर सी # में परिभाषित public enum का उपयोग करने में समस्याएं आ रही हैं। .NET प्रोजेक्ट को COM ++ और VB विरासत सॉफ़्टवेयर के भीतर उपयोग करने के लिए COM के संपर्क में लाया गया है।सी # एन सी ++ लाइब्रेरी

सी # कोड:

namespace ACME.XXX.XXX.XXX.Interfaces.Object 
{ 
    [Guid(".....")] 
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] 
    [ComVisible(true)] 
    public interface TestInterface 
    { 
     void Stub(); 
    } 

    [ComVisible(true)] 
    public enum TestEnum 
    { 
     a = 1, 
     b = 2 
    } 
} 

सी ++ कोड:

संपादित करें: परियोजना के लिए आईडीएल में मैं tlb आयात किया। (importlib("\..\ACME.XXX.XXX.XXX.Interfaces.tlb"))

interface ITestObject : IDispatch 
{ 
    [id(1), helpstring("one")] 
    HRESULT MethodOne([in] TestInterface *a); 

    [id(2), helpstring("two")]  
    HRESULT MethodTwo([in] TestEnum a); 
} 

MethodTwo में, मैं त्रुटियों TestEnum

पास

छोड़कर प्रकार विशिष्टता बताते हुए

मैं वहाँ कुछ मैं सही ढंग से नहीं कर रहा हूँ है यह सोचते हैं रहा हूँ जा रहे हैं। MethodOne संदर्भ को सही तरीके से ढूंढ रहा है।

क्या सी ++ इंटरफ़ेस में .NET enum ऑब्जेक्ट को संदर्भित करने के लिए कुछ जादू है?

उत्तर

2

Enums एक काफी quirky हैं, आपके सी # प्रोजेक्ट से प्राप्त टाइप लाइब्रेरी में TestEnum के लिए टाइप टाइप नहीं है। आप इसे इस तरह के बजाय लिख सकते हैं:

[id(2), helpstring("two")]  
    HRESULT MethodTwo([in] enum TestEnum a); 

नोट जोड़ा enum कीवर्ड। या आप यदि आप कई स्थानों में पहचानकर्ता का उपयोग करें या ++ कोड अपने सी में इसकी जरूरत अपने स्वयं के typedef घोषणा कर सकते हैं, अपने इंटरफेस घोषणा से पहले ही कर दिया:

typedef enum TestEnum TestEnum; 

आप शायद उत्तरार्द्ध पसंद करते हैं।

+0

धन्यवाद हंस। यह पूरी तरह से काम किया! –

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