Как выставить обнуляемые типы через COM

Я боролся с этой проблемой в течение полутора дней, надеюсь, кто-то может мне помочь. Позволять'скажем, у меня есть такие структуры в C #:

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

(эти структуры представляют таблицы базы данных, преобразованные из Linq в код SQL, созданный SQLMetal)

Мне нужно иметь возможность выставить эти структуры, содержащие обнуляемые типы, для COM, чтобы они могли использоваться в другом приложении (C ++). Но я не могу понять, для жизни меня, как это сделать. Я думал, что смогу создать классы для инкапсуляции типов, допускающих обнуление

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

public struct Part
{
    public NullableDouble x;
}

Такого рода работы, но на стороне C ++ я получаю указатель на класс, но без определения класса (только интерфейс):

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

struct Part
{
    MyDll_tlb::_NullableDouble* x;
}

Таким образом, я не могу разыменовать этот указатель без определения класса для доступа к членам / методам данных на стороне C ++. Это все еще кажется хорошим вариантом, если я могу просто выяснить, как получить определение класса в C ++ (яя новичок в COM).

Я подумал, что могу использовать небезопасный код, но я могуне понять, как конвертировать из двойного? удвоить * (яЯ тоже новичок в C #!):

unsafe public struct Part
{
    public double* x;
}

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

Я думал, может быть, я мог бы использовать System.Variant, но C # неТоже не нравится (непоследовательная доступность, что бы это ни значило).

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

Я использую C ++ в течение 20 лет, но я довольно плохо знаком с COM и C #, так что это немного для меня.

В худшем случае ... яЯ просто создам логический член в структуре для каждого из типов, допускающих значение NULL, и используем его, чтобы указать, следует ли рассматривать значение как нулевое. Но это только кажется глупым. Конечно, должен быть какой-то способ выставлять обнуляемые типы через COM. Почему Microsoft создает .NET типы, которые могутиспользовать в COM? Эти парни в Редмонде неидиоты (хотя иногда это так кажется).

Итак, каковы мои варианты? Каков наилучший способ сделать это?

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос