Osaisiko joku kääntää minulle tämmöisen helpohkon pätkän C++:ksi?
using System; using System.Collections.Generic; using System.Text; namespace Alert { class Program { static string ProcessInput(string s) { return s; } static void Main(string[] args) { Console.WriteLine("Alert.exe invoked with the following parameters.\r\n"); Console.WriteLine("Raw command-line: \n\t" + Environment.CommandLine); Console.WriteLine("\n\nArguments:\n"); foreach (string s in args) { Console.WriteLine("\t" + ProcessInput(s)); } Console.WriteLine("\nPress any key to continue..."); Console.ReadKey(); } } }
Onhan sinulla tietokone kotona...
namespace Alert { private __gc class Program { // Methods private: static void __gc* Main(String __gc* args __gc []) { Console::WriteLine(S"Alert.exe invoked with the following parameters.\r\n"); Console::WriteLine(String::Concat(S"Raw command-line: \n\t", Environment::CommandLine)); Console::WriteLine(S"\n\nArguments:\n"); foreach (String __gc* s in args) { Console::WriteLine(String::Concat(S"\t", Program::ProcessInput(s))); } Console::WriteLine(S"\nPress any key to continue..."); Console::ReadKey(); } private: static String __gc* ProcessInput(String __gc* s) { return s; } } }
(Suora konekäännös)
Edit: Näköjään vieläpä vanhaa syntaksia.. Noh, joku voisi tehdä paremman käännöksen. Kiinnostaisi tosin tietää miksi haluat C# -> C++ vai olisiko tarkoitus myös tehdä ei-CLR:ää siitä?
ei-CLR?
Saan nyt virheen
lainaus:
C:\Documents and Settings\Mikko\Desktop\alert.cpp|2|error: expected unqualified-id before "private"|
||=== Build finished: 1 errors, 0 warnings ===|
namespace Alert { private __gc class Program { private: static void __gc* Main(String __gc* args __gc []) { Console::WriteLine(S"Alert.exe invoked with the following parameters.\r\n"); Console::WriteLine(String::Concat(S"Raw command-line: \n\t", Environment::CommandLine)); Console::WriteLine(S"\n\nArguments:\n"); foreach (String __gc* s in args) { Console::WriteLine(String::Concat(S"\t", Program::ProcessInput(s))); } Console::WriteLine(S"\nPress any key to continue..."); Console::ReadKey(); } private: static String __gc* ProcessInput(String __gc* s) { return s; } } }
CLR tarkoittaa MS:n .NET Frameworkia, jota C# käyttää ja jolle on myös C++:sta tuo Grezin esittelemä versio C++/CLI (tai vanhempi Managed Extensions for C++). Tämä "C++.NET" on todella kaukana oikeasta C++:sta. Jos .NET-ohjelmointi kiinnostaa, suosittelen C#:aa, joka on huomattavasti selkeämpi syntaksiltaan. Muussa tapauksessa unohda sekä C# että C++/CLI.
Oikean C++:n tapauksessa kannattaa katsoa vaikka viidennen C++-oppaan lopussa olevaa esimerkkiä. Yhtenäiseen komentoriviin (tuossa Environment.CommandLine) C++:lla ei pääse käsiksi (paitsi ehkä jotenkin Windowsin omien kirjastojen kautta), mutta ohjelmalle välitetään vastaavat tiedot kuin tuossa args-taulukossa.
(Edit: linkkejä)
Tosiaan tuossa tulikin jo selitys. Lisään vielä että CLR on lyhenne sanoista Common Language Runtime.
En ole itsekään tehnyt koskaan mitään CLR-softaa C++:lla.. Mielestäni tuntuu hieman masokistiselta.
Tein itse tällaisen nykysyntaksin mukaisen käännöksen C# -> C++ (mitään muuta muuttamatta.) Nyt en vaan keksi miten saisin sen hyväksymään entrypointin olevan tuolla nimiavaruuden ja luokan sisällä (heittää siis linkkerivirheen: fatal error LNK1561: entry point must be defined)
#include "stdafx.h" using namespace System; namespace Alert { class Program { public: static int main(array<String ^> ^args) { Console::WriteLine(L"Alert.exe invoked with the following parameters.\r\n"); Console::WriteLine(String::Concat(L"Raw command-line: \n\t",Environment::CommandLine)); Console::WriteLine(L"\n\nArguments:\n"); for each (String ^s in args) { Console::WriteLine(String::Concat(L"\t", Program::ProcessInput(s))); } Console::WriteLine(L"\nPress any key to continue..."); Console::ReadKey(); return 0; }; private: static String ^ ProcessInput(String ^s) { return s; } }; }
En nyt jaksanut tapella tuon kanssa enempää vaan laitoin loppuun:
int main(array<String ^> ^args) { return Alert::Program::main(args); }
Todella ruman näköistä, mutta ainakin sain testattua että tuo kääntyy ja toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.