在C ++ / CLI,我该如何声明和调用函数与“出”参数? [英] In C++/CLI, how do I declare and call a function with an 'out' parameter?
问题描述
我有一个函数解析一个字符串中成两个字符串。在C#我会宣布这样的:
I have a function which parses one string into two strings. In C# I would declare it like this:
void ParseQuery(string toParse, out string search, out string sort)
{
...
}
和我这样称呼它:
string searchOutput, sortOutput;
ParseQuery(userInput, out searchOutput, out sortOutput);
目前的项目必须在C ++ / CLI完成。我试过
The current project has to be done in C++/CLI. I've tried
using System::Runtime::InteropServices;
...
void ParseQuery(String ^ toParse, [Out] String^ search, [Out] String^ sort)
{
...
}
但如果我把它称为是这样的:
but if I call it like this:
String ^ searchOutput, ^ sortOutput;
ParseQuery(userInput, [Out] searchOutput, [Out] sortOutput);
我得到一个编译错误,如果我把它称为是这样的:
I get a compiler error, and if I call it like this:
String ^ searchOutput, ^ sortOutput;
ParseQuery(userInput, searchOutput, sortOutput);
然后我得到一个运行时错误。我应该如何申报,并调用我的功能?
then I get an error at runtime. How should I declare and call my function?
推荐答案
C ++ / CLI本身并不支持真正的'出来'的说法,但你可以标记一个引用作为一个彻头彻尾的参数,使其他的语言把它看成是真正出来的说法。
C++/CLI itself doesn't support a real 'out' argument, but you can mark a reference as an out argument to make other languages see it as a real out argument.
您可以为引用类型,这样做的:
You can do this for reference types as:
void ReturnString([Out] String^% value)
{
value = "Returned via out parameter";
}
// Called as
String^ result;
ReturnString(result);
和值类型为:
void ReturnInt([Out] int% value)
{
value = 32;
}
// Called as
int result;
ReturnInt(result);
的%使它成为参考参数和OutAttribute标记,它仅用于输出值
The % makes it a 'ref' parameter and the OutAttribute marks that it is only used for output values.
这篇关于在C ++ / CLI,我该如何声明和调用函数与“出”参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!