Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的字符串和C+中的字符串^+/气候。。。如何通过;空“;? 我得到了一些C++库。我还为它提供了C++/CLI包装器,使它能够用C#代码从这个库中调用方法_C#_C++_String_C++ Cli_Argumentnullexception - Fatal编程技术网

C#中的字符串和C+中的字符串^+/气候。。。如何通过;空“;? 我得到了一些C++库。我还为它提供了C++/CLI包装器,使它能够用C#代码从这个库中调用方法

C#中的字符串和C+中的字符串^+/气候。。。如何通过;空“;? 我得到了一些C++库。我还为它提供了C++/CLI包装器,使它能够用C#代码从这个库中调用方法,c#,c++,string,c++-cli,argumentnullexception,C#,C++,String,C++ Cli,Argumentnullexception,假设我想在C中使用一些调用,如下所示: string date = MyWrapper.GetValue("SystemSettings", "BuildDate", null); 它将调用C++/CLI上的下一个函数: static String^ GetValue(String^ section, String^ key, String^ defaultValue) 我的问题:我得到了下一个例外: 值不能为空。\r\n参数名称:managedString 所以。。。问题:如何正确传递nu

假设我想在C中使用一些调用,如下所示:

string date = MyWrapper.GetValue("SystemSettings", "BuildDate", null);
它将调用C++/CLI上的下一个函数:

static String^ GetValue(String^ section, String^ key, String^ defaultValue)
我的问题:我得到了下一个例外:

值不能为空。\r\n参数名称:managedString

所以。。。问题:如何正确传递
null

谢谢。

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

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

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

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


Windows运行时也有类似的限制。请参阅对问题的详细回答。看起来您可能被某个非常接近它的东西困住了。

谁抛出了异常?很明显,你不应该为那个参数传递null是有原因的。C++的代码> GETValueMe()/Cord>的实现很可能抛出异常,因为在那里传递NULL是非法的。(可能错误发生在堆栈的底层,因为参数名不是
GetValue()
的参数之一)实际上我认为这是常见的异常和常见的消息。因为C++没有任何东西,而且实际上-如果它能做的话,我怎么才能在C语言中捕捉到它呢?我的意思是用有效消息捕获…不要传递null,当INI设置丢失时,您使用的库不喜欢这样。空是一个合理的选择。也不要使用INI文件,它们是一个完整的perf disaster.Yep。它会很好用的。但是如果我需要传递“null”怎么办?在这种情况下,您应该调查您的库。:@user2706838基本C函数的编写方式使它们假设null可能不会传递给它。用户有责任向这些函数传递正确的参数。@VladFrommosco这并没有回答所问的问题。问的问题是如果你第一次不理解,如何传递
null
@David Heffernan阅读我之前的评论。注意。所以通常情况下,异常是预期行为?那么,尝试使用空引用执行任何实质性操作(除了测试
nullptr
)都会导致异常。你用它做了什么?如果您需要比您已经收到的更多的帮助,您需要显示
GetValue
的实现!谢谢。。。在调用..@user2706838的分支中发现了一些可怕的“抛出”,为对象传递null可能是完全正确的。但是,与所有API一样,您必须遵守合同
ArgumentNullException
专门用来告诉您您没有,这非常有用,尤其是当合同没有完整的文档记录时。我不确定WinRT是从哪里来的,您是对的,@DavidHeffernan。我刚刚认识到我遇到的问题,它看起来非常类似。我可能认为C++/CLI包装器,
GetValue
,正在将
^String
传递给WinRT函数。