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.