У меня есть библиотека C ++. А также я получил оболочку C ++ / CLI, чтобы сделать возможным вызов методов из этой библиотеки в коде C #.
Допустим, я хотел бы использовать некоторые вызовы в C #, например:
string date = MyWrapper.GetValue("SystemSettings", "BuildDate", null);
которая будет вызывать следующую функцию на C ++ / CLI:
static String^ GetValue(String^ section, String^ key, String^ defaultValue)
Моя проблема: я получил следующее ArgumentNullException:
Значение не может быть пустым. \ R \ nПараметр имени: managedString.
Итак … Вопрос: как пройти null
правильно?
Благодарю.
Ваш код с нулевым значением в порядке. Проблема в том, что ваш код-обертка должен обнаружить ноль и справиться с ним. Этот код предположительно написан в предположении, что третий параметр никогда не является нулевым. Если вы хотите разрешить null, вы должны явно обработать это условие:
static String^ GetValue(String^ section, String^ key, String^ defaultValue)
{
if (defaultValue == nullptr)
// special case handling
....
}
Существует аналогичное ограничение для Windows Runtime. Увидеть этот подробный ответ на аналогичный вопрос. Похоже, вы могли поймать в ловушку что-то очень близкое к этому.
Возможно, вам нужно передать пустую строку вместо нуля. Например
string date = MyWrapper.GetValue("SystemSettings", "BuildDate", "");