C#中的字符串和C+中的字符串^+/气候。。。如何通过;空“;? 我得到了一些C++库。我还为它提供了C++/CLI包装器,使它能够用C#代码从这个库中调用方法
假设我想在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
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函数。