Visual Studio 2015 - C++ Win32-Konsolenanwendung auf jedem PC



  • Hallo Leute,

    ich bin neu in der Sprache C++ und meine Erfahrungen mit dem Compelieren von einem Code, sind sehr spartanisch ansortiert.

    Ich versuche schon seit Tagen eine Herausforderung zu "knacken" - ein Code (Kryptograph nach Cesar-Verfahren) soll auf einen anderen PC (der nicht Visual Studio installiert hat) laufen - also die .exe Datei im Debug - Verzeichnis.

    Doch schön langsam gehen mir die Ideen aus - wo die Herausforderung liegt.

    Ich habe versucht in den Projekteinstellungen - Konfigurationseigenschaften - C++ - die Laufzeitbibliothek auf ...(/MT) zu stellen. Doch das lässt der Compiler nicht zu mit dieser Einstellung verweigert er

    Ich hab die Microsoft Visual C++ 2015 Redistributable Package für 32 und 64Bit installiert.

    Wobei ich auch eingestehe das dieses Visual Studio ein Programm ist - das mich erschlägt und ich keine Referenzen auf angenehme Alternativen hatte und dafür aufjeden Fall auch offen bin. Ich brauch das Programmieren erstmal für das Informatikstudium in der Eingangsphase. Wobei ich durchaus schon den Spass und die Freude an der Sprache heraus gekizelt wurde ;-).

    Ich bedanke mich im Voraus schon für die Hilfe und wenn ich Informationen übersehen habe, bitte kurze Info

    Grüße

    Andrew



  • Andrew_1981 schrieb:

    Ich habe versucht in den Projekteinstellungen - Konfigurationseigenschaften - C++ - die Laufzeitbibliothek auf ...(/MT) zu stellen. Doch das lässt der Compiler nicht zu mit dieser Einstellung verweigert er

    Fehlermeldung?



  • hustbaer schrieb:

    Andrew_1981 schrieb:

    Ich habe versucht in den Projekteinstellungen - Konfigurationseigenschaften - C++ - die Laufzeitbibliothek auf ...(/MT) zu stellen. Doch das lässt der Compiler nicht zu mit dieser Einstellung verweigert er

    Fehlermeldung?

    Code D8016 - Die Befehlszeilenoptionen /clr und /MT sind inkompatibel

    und wenn ich das /clr austausche gehen die Fehlermeldungen ins quasi Bodenlose.



  • Visual Studio unterstützt u.a. ISO C++ und C++/CLI. Ich denke mal du lernst eher ersteres. Wenn du ein neues Projekt erstellst, erstellst du am besten ein leeres Projekt. Dann fügst du ein paar Quelldateien hinzu und drückst F5. Nun werden deine Dateien Compiliert, gelinkt und das fertige Programm schließlich im Debugger gestartet.
    Möchtest du andere an deinem Programm teilhaben, kannst du statt der 'Debug'-Konfiguration 'Release' einstellen und in den Projekteinstellungen unter C/C++, Codegenerierung die Laufzeitbibliothek vom standardmäßigen 'Multithreaded DLL' auf 'Multithreaded' stellen. Dann brauchst du auch das Redistributable auch nicht mehr installieren, das ist dann im Programm nämlich schon drin.



  • roflo schrieb:

    Visual Studio unterstützt u.a. ISO C++ und C++/CLI. Ich denke mal du lernst eher ersteres. Wenn du ein neues Projekt erstellst, erstellst du am besten ein leeres Projekt. Dann fügst du ein paar Quelldateien hinzu und drückst F5. Nun werden deine Dateien Compiliert, gelinkt und das fertige Programm schließlich im Debugger gestartet.
    Möchtest du andere an deinem Programm teilhaben, kannst du statt der 'Debug'-Konfiguration 'Release' einstellen und in den Projekteinstellungen unter C/C++, Codegenerierung die Laufzeitbibliothek vom standardmäßigen 'Multithreaded DLL' auf 'Multithreaded' stellen. Dann brauchst du auch das Redistributable auch nicht mehr installieren, das ist dann im Programm nämlich schon drin.

    Hey, auch dir Danke für deine Mühe.

    Jedoch funktionert das nicht und die 4090 Fehlermeldungen würden, denk ich den Rahmen sprengen. 😡



  • Hast du wirklich ein neues, leeres (!!!) projekt erstellt?
    Zeig am besten auch mal deinen Code.



  • roflo schrieb:

    Hast du wirklich ein neues, leeres (!!!) projekt erstellt?
    Zeig am besten auch mal deinen Code.

    Ja ich fang all meine Übungen mit einem leeren Projekt an.
    Gern stell ich mal den Code hier rein.

    #include <string>
    #include <sstream>
    #include <iostream>
    #include <algorithm>
    #include <fstream>
    #include <iterator>
    
    using namespace std;
    
    string start()
    {
    	//ist der Startstring der definiert wie die eingaben gemacht werden sollen so dass, das Programm laeuft
    	cout << "(c) by Andrew Ullmann 2016" << "\n\t\t\t\t\t" << "K R Y P T O G R A P H \n\n\n";
    	cout << "ich arbeite so weit es geht 'sorgenfrei' - ich bemuehe mich zumindest ;-) \n";
    	cout << "da ich weiss, wie aufwendig es ist aus der Konsole Inforamtionen weiter zu verwenden, \n";
    	cout << "speicher ich dir Deine Datein die du durch mich verarbeiten laesst. \n";
    	cout << "\n" << "Damit dies auch so funktioniert sind die folgende Punkte als \n";
    	cout << "\t" << " - notwendige Bedingung - " << "\t" << " anzusehen: \n";
    	cout << "- Sorge dafuer, dass der Ordner 'vbTest' (im root) existiert. \n";
    	string start = "ok...";
    	return start;
    }
    
    char myToUpper(char text)
    {
    	return toupper(static_cast<unsigned char>(text)); //wandle in Grossbuchstaben um 'tolower()' ist in Kleinbuchstaben umzuwandeln
    }   
    string codieren()
    {
    	string text = "Startwert";
    	int key = (rand() % 26); //zufallsschluessel wird generiert zwischen 1 und 25
    
    	cout << "\n\n\t" << "Gib jetzt bitte deinen Text ein (mit Enter bestaetigst du deine Eingabe und diese wird Codiert:\n\n";
    	cin.ignore();
    	getline(cin, text); //nimmt auch leerzeichen mit dazu
    
    	transform(text.begin(), text.end(), text.begin(), myToUpper);
    
    	string str_zaehler;
    	stringstream string_stringstream;
    	string_stringstream << key;
    	string_stringstream >> str_zaehler;
    
    	string neuerText = str_zaehler + "";
    
    	int laenge = text.length(); //string wird abgezählt
    	char z[500]; //char-variable vorbereitet mit der konstanten 500
    	int x[500];
    
    	for (int i = 0; i < laenge; ++i)
    	{
    		z[i] = text[i]; //string in char zerlegen
    		x[i] = z[i]; //char in int umwandeln
    
    		if (x[i] == 32)
    			neuerText = neuerText + z[i]; 
    
    		else if ((x[i] + key >= 65) && (x[i] + key <= 90))
    		{
    			z[i] = x[i] + key;
    			neuerText = neuerText + z[i];
    		}
    		else
    		{
    			z[i] = (x[i] + key) - 26;
    			neuerText = neuerText + z[i];
    		}
    	}
    
    	return neuerText;
    }
    string decodieren(string text)
    {	
    		string neuerText = "";
    
    		string keyAuslesen = text.substr(0, 2); // speichert den Key (ersten beiden Stellen) in einem Sub-String
    		text = text.erase(0, 2); //loescht den Key aus dem Text
    
    		stringstream zumAuslesen;
    		zumAuslesen << keyAuslesen;
    		int key;
    		zumAuslesen >> key;
    
    		int laenge = text.length(); //string wird abgezählt
    		char z[500]; //char-variable vorbereitet mit der konstanten 50
    		int x[500];
    
    		for (int i = 0; i < laenge; ++i)
    		{
    			z[i] = text[i]; //string in char zerlegen
    			x[i] = z[i]; //char in int umwandeln
    
    			if (x[i] == 32)
    				neuerText = neuerText + z[i];
    
    			else if ((x[i] - key >= 65) && (x[i] - key <= 90))
    			{
    				z[i] = x[i] - key;
    				neuerText = neuerText + z[i];
    			}
    			else
    			{
    				z[i] = (x[i] - key) + 26;
    				neuerText = neuerText + z[i];
    			}
    		}
    		return neuerText;
    }
    string abSpeichern(string codierterText, string anWem)
    {
    	string dateiName = anWem + ".txt"; //dateiName wird erzeugt
    	ofstream data;
    	data.open("c:\\vbTest\\" + dateiName);
    	data << codierterText << endl;
    	data.close();
    
    	return "abgespeichert";
    
    }
    string getFileIn_string()
    {
    	string dateiBezeichnung = "";
    
    	cout << "\n\n\t\t" << "Dateinamen eingeben: " << flush;
    	cin.ignore();
    	getline(cin, dateiBezeichnung);
    
    	ifstream in("c:\\vbTest\\" + dateiBezeichnung);
    	ostringstream s;
    	s << in.rdbuf();
    	string textAusFile = s.str();
    	textAusFile.erase(textAusFile.end() - 1);
    
    	return textAusFile;
    }
    string currentDateToString()
    {
    	return 0;	
    }
    
    int main()
    {
    
    	string anWem; //vorlaeufiger dateiname
    
    	cout << "Hallo! \n" ;
    	cout << start() << "\n\n";
    	cout << "An wem ist der Text gerichtet? ";
    	cin >> anWem;
    
    	anWem = "Von_" + anWem;
    	cout << "\n\t" << "soll der Text mit 1 codiert oder mit 2 decodiert werden? ";
    	char eing; //fuer die Abfrage ob Codiert oder Decodiert werden soll
    	cin >> eing;	
    
    		if ((eing == '1') || (eing == '2'))
    		{
    
    			if (eing == '1')
    				{
    					string codierterText = codieren();
    
    					system("cls");
    					cout << "okay ..." << "\n\n" << codierterText << "\n\n\n\n";
    					cout << "\n\n\n" << abSpeichern(codierterText, anWem) <<"\n\n";
    
    					system ("pause");
    					return 0;
    				}
    
    			if (eing == '2')
    				{	
    					string decodierterText = decodieren(getFileIn_string());
    					system("cls");
    					cout << "\n" << decodierterText;
    					cout << "\n\n\n" << abSpeichern(decodierterText, anWem) << "\n\n";
    					system("pause");
    					return 0;
    				}
    			return 0;
    		}
    		else cout << "\t\t" << "Sorry ich konnte deine Eingabe nicht verstehen, Tschau ;-).";
    system("pause");
    return 0;
    }
    

    Vielen Dank für das Feedback!

    Grüße

    Andrew



  • Ich habe hier mal ein Testprojekt hochgeladen: http://mrfexef.bplaced.net/code/asdasdddddd.rar
    Dein Code lässt sich wunderbar erstellen (ob er gut ist oder nicht hab ich nicht geguckt), irgendwas machst du falsch 😉



  • Beim Erstellen des Projektews vor dem Anklicken von "leeres Projekt" auch die "vorcompilierten Header" ausgemacht?



  • Ich hab erneut ein neues Projekt erstellt und erneut darauf geachtet, dass es sich um ein leeres Projekt handelt und Ja es ist tatsächlich ein leeres Projekt.

    Ich muss zu meiner 😮 scharm feststellen - dass es anscheinend an der Security Development Lifecycle (SDL)-Prüfungen lag - denn das war aktiv.

    Ich Danke euch für die Mühe. Ich werd das morgen mal Testen ob das jetzt auf einen anderen PC damit funktioniert.

    Danke noch einmal @all 😉

    Gute Nacht - jetzt kann ich schlafen 😉



  • So Feedback ist da, Leider schaff ich es nicht den Code so zu kompensieren, dass er auf einen andren PC als exe ausgeführt wird.

    Hat jmd. Noch eine Idee woran es liegen kann? Meine Ideen sind erschöpft und verliefen im Sand.



  • Was passiert denn wenn du die exe auf einem anderen Computer ausführst?



  • volkard schrieb:

    Beim Erstellen des Projektews vor dem Anklicken von "leeres Projekt" auch die "vorcompilierten Header" ausgemacht?

    Ja ist alles ausgeschaltet, mehr Einstellungen sind einfach nicht mehr möglich 😕 😕 - zumindest soweit ich das beurteilen kann



  • roflo schrieb:

    Was passiert denn wenn du die exe auf einem anderen Computer ausführst?

    Der PC - öffnet 3x den Prozess (zumindest wird es im Taskmanager so angezeigt) es öffnet die Konsole und dann war es das. Es erfordert einen Neustart des PC's damit auch die Prozesse wieder geschlossen werden können



  • Das ist sehr merkwürdig. Versuche mal mein hochgeladenes Projekt als 'release' (oben neben dem grünen knopf) kompilieren, mit der 'Multithreaded'-Einstellungen, die ich bereits erwähnt habe. Teste das Ergebnis dann mal.



  • roflo schrieb:

    Das ist sehr merkwürdig. Versuche mal mein hochgeladenes Projekt als 'release' (oben neben dem grünen Knopf) kompilieren, mit der 'Multithreaded'-Einstellungen, die ich bereits erwähnt habe. Teste das Ergebnis dann mal.

    ja funktioniert dennoch nicht ich versuche mal die Datein hier freizugeben zum austesten ob es vielleicht an dem PC liegt (nur um das mal auszuschließen)

    Das ist der Ordner dem mir der Compiler von Visual Studio 2015 anlegt und die Dateien erzeugt er:

    https://www.dropbox.com/sh/jzfn0gay79ru6yg/AAA48Pz3ftNLoT-RSeTZ06Rqa?dl=0

    Vielen Dank!

    Andrew



  • Inspiziert mit einem Disassembler und PE Explorer meiner Wahl habe ich herausgefunden, dass das Programm keine Abhängigkeiten außer kernel32.dll und advapi32.dll hat, es müsste also überal laufen können. Tut es auch bei mir. Welches Betriebssystem ist denn auf dem TestPC drauf?



  • roflo schrieb:

    Inspiziert mit einem Disassembler und PE Explorer meiner Wahl habe ich herausgefunden, dass das Programm keine Abhängigkeiten außer kernel32.dll und advapi32.dll hat, es müsste also überal laufen können. Tut es auch bei mir. Welches Betriebssystem ist denn auf dem TestPC drauf?

    Windows 7



  • Das Programm startet also ohne Konsole? Wenn du das Programm im Taskmanager töten willst, geht es nicht? Vielleicht liegts am Virenprogramm?



  • roflo schrieb:

    Das Programm startet also ohne Konsole? Wenn du das Programm im Taskmanager töten willst, geht es nicht? Vielleicht liegts am Virenprogramm?

    Danke, es lag am Virenscanner 😉


Log in to reply