在C ++ / CLI,我该如何声明和调用函数与“出”参数? [英] In C++/CLI, how do I declare and call a function with an 'out' parameter?

查看:368
本文介绍了在C ++ / CLI,我该如何声明和调用函数与“出”参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个函数解析一个字符串中成两个字符串。在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆