2016-03-23 44 views
7

Mam problemy przy użyciu public enum zdefiniowane w C# w interfejsie C++. Projekt .NET jest wystawiony na działanie COM, które może być używane w ramach starszego oprogramowania C++ i VB.C# Enum w bibliotece C++

C# Kod:

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 
    } 
} 

C++ Kod:

Edit: W IDL dla projektu I importowane 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); 
} 

W MethodTwo, wciąż otrzymuję błędy stwierdzające

wyjątkiem Rodzaj blisko TestEnum

jestem przy założeniu, że jest coś nie robię poprawnie. MethodOne wydaje się poprawnie znajdować odniesienie.

Czy istnieje trochę magii odwoływania się do obiektu enum .NET w interfejsie C++?

Odpowiedz

2

Wyliczenia są dość dziwaczne, biblioteki typów, które otrzymałeś z projektu C#, nie mają typedef dla TestEnum. Możesz napisać to tak zamiast:

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

Uwaga dodana enum słów kluczowych. Lub można zadeklarować swoją typedef jeśli używasz identyfikator w wielu miejscach lub potrzebują go w kod C++, umieścić go przed deklaracją interfejsu:

typedef enum TestEnum TestEnum; 

Prawdopodobnie wolą tego ostatniego.

+0

Dziękuję Hans. To działało idealnie! –