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)
{
...
}
and I'd call it like this:
string searchOutput, sortOutput;
ParseQuery(userInput, out searchOutput, out sortOutput);
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?
It's not supported. The closest you can get is ref
Granted you can fake it, but you lose a compile time check.
Using Visual Studio 2008, this works and solved a major problem at my job. Thanks!
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:
And for value types as:
The % makes it a 'ref' parameter and the OutAttribute marks that it is only used for output values.