Визуальная отправка нуля из C ++ / CLI в управляемый C #

У меня есть оболочка C ++ / CLI, чтобы иметь возможность вызывать код C #. В коде C # у меня есть метод, который принимает в качестве параметра перечисляемое значение null, но я не могу понять, как я могу вызвать этот метод с нулевым параметром из моей оболочки.

C # метод:

public int DoSomething(MyEnum? option)
{
if (option != null)
//Do something
else
//Do something else
}

Функция C ++, вызывающая DoSomething ():

int MyMethod(int option)
{
int myVal;
if (option > -1)
{
myVal = component->DoSomething((CSharpNameSpace::MyEnum)option); //This works
}
else
{
myVal = component->DoSomething(??); //I want to send null here
}
}

Я пробовал несколько вещей, но пока ничего не получалось:

  • Отправка 0, NULL или nullptr не скомпилируется
  • (CSharpNameSpace :: MyEnum) NULL, конечно, устанавливает значение в 0

У меня нет контроля над кодом C #, поэтому я не могу изменить перечисление, чтобы иметь значение none или что-то подобное.

0

Решение

Обнуляемые типы не получают никакой любви к синтаксису в C ++ / CLI, в отличие от C #. Основное препятствие, с которым вы сталкиваетесь, заключается в том, что не существует неявного преобразования из nullptr в Nullable. Простой способ — использовать конструктор по умолчанию:

int MyMethod(int option)
{
Nullable<ClassLibrary1::MyEnum> enu;
if (option > -1) enu = safe_cast<ClassLibrary1::MyEnum>(option);
return component->DoSomething(enu);
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]