rozwiązanie 1 ładne (tablica jako pole statyczne klasy (może być formy))
using namespace System;
ref struct Statyczna abstract sealed
{
static array<String^> ^args;
};
void foobar()
{
Console::WriteLine(Statyczna::args->Length);
for each (String ^param in Statyczna::args)
Console::WriteLine(param);
}
int main(array<String^> ^args)
{
Statyczna::args = args;
foobar();
}
rozwiązanie 2 brzydkie (tablica jako zmienna globalna przy wykorzystaniu gcroot
)
#include <msclr\gcroot.h>
using namespace System;
using namespace msclr;
gcroot<array<String^>^> globalna;
void foobar()
{
Console::WriteLine(globalna->Length); // wiele operacji zadziała od razu...
for each (String ^param in static_cast<array<String^>^>(globalna)) // ...ale foreach niestety wymaga rzutowania
Console::WriteLine(param);
}
int main(array<String^> ^args)
{
globalna = args;
foobar();
}
rozwiązanie 3 ładne (metoda Main()
na wzór C#, z funkcją main()
będącą tylko przekierowaniem)
using namespace System;
ref class Program
{
public: static int Main(array<String^> ^args)
{
Console::WriteLine(args->Length);
for each (String ^param in args)
Console::WriteLine(param);
return 0;
}
};
int main(array<String^> ^args)
{
return Program::Main(args);
}
albo jak _13th_Dragon powiedział, parametr konstruktora.