C#中的字符串和C ++ / CLI中的String ^ ...如何传递“null”?

时间:2014-01-02 12:01:16

标签: c# c++ string c++-cli argumentnullexception

我有一些C ++库。我还得到了C ++ / CLI包装器,以便在C#代码中调用来自该库的方法。

让我说我想在C#中使用这样的调用:

string date = MyWrapper.GetValue("SystemSettings", "BuildDate", null);

将调用C ++ / CLI上的下一个函数:

static String^ GetValue(String^ section, String^ key, String^ defaultValue)

我的问题:我得到了下一个ArgumentNullException:

  

值不能为null。\ r \ nParameter name:managedString。

所以......问题:我应该如何正确通过null? 感谢。

3 个答案:

答案 0 :(得分:9)

传递null的代码很好。问题是你的包装器代码需要检测null并处理它。该代码可能是在假设第三个参数永远不为空的情况下编写的。如果您希望允许null,则必须显式处理该条件:

static String^ GetValue(String^ section, String^ key, String^ defaultValue)
{
    if (defaultValue == nullptr)
        // special case handling
    ....
}

答案 1 :(得分:1)

Windows运行时存在类似的限制。请参阅this similar question详细答案。看起来你可能已经陷入了非常接近它的东西。

答案 2 :(得分:0)

也许你需要传递一个空字符串而不是null。例如

string date = MyWrapper.GetValue("SystemSettings", "BuildDate", "");