out在c语言中文件中,在C ++ / CLI中,我如何声明和调用带有“out”参数的函数?...

在C ++ / CLI中,我如何声明和调用带有“out”参数的函数?

我有一个函数将一个stringparsing为两个string。 在C#中,我会声明这样的:

void ParseQuery(string toParse, out string search, out string sort) { ... }

我会这样称呼它:

string searchOutput, sortOutput; ParseQuery(userInput, out searchOutput, out sortOutput);

当前的项目必须在C ++ / CLI中完成。 我试过了

using System::Runtime::InteropServices; ... void ParseQuery(String ^ toParse, [Out] String^ search, [Out] String^ sort) { ... }

但是如果我这样称呼它:

String ^ searchOutput, ^ sortOutput; ParseQuery(userInput, [Out] searchOutput, [Out] sortOutput);

我得到一个编译器错误,如果我这样调用它:

String ^ searchOutput, ^ sortOutput; ParseQuery(userInput, searchOutput, sortOutput);

那么我在运行时遇到错误。 我应该如何声明和呼叫我的function?

C ++ / CLI本身不支持真正的“out”参数,但是可以将引用标记为out参数,以使其他语言将其视为真正的参数。

你可以这样做的引用types为:

void ReturnString([Out] String^% value) { value = "Returned via out parameter"; } // Called as String^ result; ReturnString(result);

对于价值types如下:

void ReturnInt([Out] int% value) { value = 32; } // Called as int result; ReturnInt(result);

%使其成为'ref'参数,OutAttribute标记它仅用于输出值。

使用Visual Studio 2008,这个工作,解决了我的工作中的一个主要问题。 谢谢!

// header // Use namespace for Out-attribute. using namespace System::Runtime::InteropServices; namespace VHT_QMCLInterface { public ref class Client { public: Client(); void ReturnInteger( int a, int b, [Out]int %c); void ReturnString( int a, int b, [Out]String^ %c); } } // cpp namespace VHT_QMCLInterface { Client::Client() { } void Client::ReturnInteger( int a, int b, [Out]int %c) { c = a + b; } void Client::ReturnString( int a, int b, [Out]String^ %c) { c = String::Format( "{0}", a + b); } } // cs namespace TestQMCLInterface { class Program { VHT_QMCLInterface.Client m_Client = new VHT_QMCLInterface.Client(); static void Main(string[] args) { Program l_Program = new Program(); l_Program.DoReturnInt(); l_Program.DoReturnString(); Console.ReadKey(); } void DoReturnInt() { int x = 10; int y = 20; int z = 0; m_Client.ReturnInteger( x, y, out z); Console.WriteLine("\nReturnInteger: {0} + {1} = {2}", x, y, z); } void DoReturnString() { int x = 10; int y = 20; String z = "xxxx"; m_Client.ReturnString(x, y, out z); Console.WriteLine("\nReturnString: {0} + {1} = '{2}'", x, y, z); } } }

它不受支持。 最接近你可以得到的是ref

当然,你可以伪造它,但你失去了一个编译时间检查。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值