Jak ujawnić typy dopuszczające wartości null przez COM

Od półtora dnia zmagam się z tym problemem, mam nadzieję, że ktoś może mi pomóc. Powiedzmy, że mam takie struktury w C #:

public struct Part
{
    public double? x;  // or System.Nullable<double> x, doesn't really matter
}

(te struktury reprezentują tabele bazy danych, przekonwertowane z Linq na kod SQL stworzony przez SQLMetal)

Muszę być w stanie ujawnić te struktury, zawierające typy dopuszczające wartości null, do COM, aby mogły być użyte w innej aplikacji (C ++). Ale nie potrafię zrozumieć, jak to zrobić. Pomyślałem, że mogę utworzyć klasy do hermetyzacji typów dopuszczających wartość pustą:

public class NullableDouble
{
    private double _Value;
    // class methods...
}

public struct Part
{
    public NullableDouble x;
}

To działa, ale po stronie C ++ kończę się wskaźnikiem do klasy, ale bez definicji klasy (tylko interfejs):

interface DECLSPEC_UUID("{E8EE4597-825D-3F4C-B20B-FD6E9026A51C}") _NullableDouble;

struct Part
{
    MyDll_tlb::_NullableDouble* x;
}

Dlatego nie mogę wyłuskać tego wskaźnika bez definicji klasy, z której można uzyskać dostęp do elementów danych / metod po stronie C ++. To wciąż wydaje się dobrą opcją, jeśli mogę po prostu dowiedzieć się, jak uzyskać definicję klasy w C ++ (jestem nowym użytkownikiem COM).

Myślałem, że mogę użyć niebezpiecznego kodu, ale nie mogę się przekonać, jak konwertować z podwójnego? podwoić * (jestem też nowym użytkownikiem C #!):

unsafe public struct Part
{
    public double* x;
}

Part part = new Part()
{
    x = AnotherObject.x // AnotherObject.x is a System.Nullable<double>
}

Pomyślałem, że może mógłbym użyć System.Variant, ale C # też tego nie lubi (niespójna dostępność, cokolwiek to znaczy).

public struct Part
{
    public Variant x;  
    // produces 2 errors: 
    //   1) System.Variant inaccessible, 
    //   2) inconsistent accessibility
}

Używam C ++ od 20 lat, ale jestem całkiem nowy w COM i C #, więc jest to dla mnie trochę trudna sprawa.

Najgorszy scenariusz ... Po prostu utworzę element boolowski w strukturze dla każdego z typów dopuszczających wartość pustą i użyję tego do wskazania, czy wartość ma być traktowana tak, jakby była pusta. Ale to wydaje się głupie. Z pewnością musi istnieć jakiś sposób na ujawnienie typów dopuszczających wartość zerową za pośrednictwem COM. Dlaczego Microsoft tworzy typy .NET, których nie można używać w COM? Ci faceci w Redmond nie są idiotami (choć czasami wydaje się, że tak jest).

Jakie są moje opcje? Jak najlepiej to zrobić?

Z góry dziękuję.

questionAnswers(1)

yourAnswerToTheQuestion