Problem Dateipfade aus .cfg auszulesen und zu speichern



  • Hallo Leute. Ich hab vor einiger zeit( n halbes jahr her xD) angefangen mir ne art gamelauncher zu schreiben. darin will ich die Dateipfade und Spielnamen aus ner .cfg auslesen, und dann starte.

    das auslesen klappt:

    std::ifstream ifs;
        ifs.open("C:\\Users\\Martin\\Documents\\Visual Studio 2010\\Projects\\GamesAndMore\\GamesAndMore\\Config\\Config.cfg");
    
    	std::string GameName[256];
    	int PathNumber = 1;
    
        while ( ! ifs.eof() ) {
        	std::string aLine = "";
        	std::getline(ifs, aLine);
    		aLine = aLine + "\n";
    
    		const char* Line = aLine.c_str();
    		std::string Name = ""; 
    
    		for (int i=0; i<= aLine.size(); i++)
    		{
    			if(Line[i] == 42)
    			{
    				i++;
    				for( int PathCursor = i; PathCursor <= aLine.size(); PathCursor++)
    				{
    					GameName[PathNumber] = GameName[PathNumber] + Line[PathCursor];
    				}
    
    				Name = Name + "\n";
    				i = aLine.size() + 1;
    			}
    			else{
    				Name = Name + Line[i];
    			}
    		}
    
    		std::cout<<Name;
    		PathNumber++;		
    
        }
    
        ifs.close();
    

    das funzt alles wie es soll ( ich weiß, dass ich keine fehlerbetrachtung drin habe).

    Die Werte im Array stimmen auch.

    Das ist der teil der nicht funzt:

    int iEingabe;
    	std::cout<<"Zum starten die Nummer des Spiels  eingeben: ";
    	std::cin >> iEingabe;
    	String* GameStartName ="";
    
    	MarshalString(GameStartName, GameName[iEingabe]);
    
    	ProcessStartInfo* GPUClockHigh = new ProcessStartInfo(S"C:\\Program Files (x86)\\AMD GPU Clock Tool\\AMDGPUClockTool.exe");
    
    		GPUClockHigh->Arguments = S"-eng=750 -mem=900";
    
    		Process* GPUClockHigh_Process = Process::Start(GPUClockHigh);
    
    		GPUClockHigh_Process->WaitForExit();
    
    		std::cout<<"Taktrate erfolgreich gesteigert, Spiel wird gestartet. Viel Spass.";
    
    	ProcessStartInfo* Game = new ProcessStartInfo(GameStartName);
    
    	Process* GameStart = Process::Start(Game);
    
    	GameStart->WaitForExit();
    
    	ProcessStartInfo* GPUClockLow = new ProcessStartInfo(S"C:\\Program Files (x86)\\AMD GPU Clock Tool\\AMDGPUClockTool.exe");
    
    		GPUClockLow->Arguments = S"-eng=200 -mem=200";
    
    		Process* GPUClockLow_Process = Process::Start(GPUClockLow);
    
    		GPUClockLow_Process->WaitForExit();
    
    		std::cout<<"\nTaktrate erfolgreich gesenkt. Programm wird beendet.";
    

    es wird einfach der string GameStartName nicht mit nem Wert versehen( die funktion die das machen soll (MarshalString) sieht so aus:

    void MarshalString ( System::String* s, std::string& os )
        {
        using namespace System::Runtime::InteropServices;
        const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
        os = chars;
        Marshal::FreeHGlobal(IntPtr((void*)chars));
        }
    

    ( nicht von mir, hab ich in nem forum gefunden).

    wenn ich jetzt in der line bevor das spiel aufgerufen wird anhalte( der andere aufruf funzt)( line 21), dann ist
    GameStartName leer, und der entsprechende string im GameName array leer. Der Processaufruf bricht danach also ab, weil kein filename übergeben wird.



  • Nimm doch einfach ShellExecuteEx oder CreateProcess und lass den managed Teil weg.



  • kann ich dann direkt den eintrag aus dem string array als dateipfad nehmen? wenn ja werde ichs mir angucken. würde die sache vereinfachen( auch weil ich den code den ich verwende nich wirklich verstehe un nur kopiert hab um das array umzuwandeln, weil das i-wie nich normal ging)

    edit: is der beispielcode ok, oder nicht?



  • Das ist ja furchtbar was Du da machst....

    Nimm *entweder* C/C++ *oder* C++/CLI; aber doch nicht beides in so einem Mischmasch... das kann ja keine Sau mehr warten...



  • dann gib mir mal n tipp... wie gesagt, hab einiges aus anderen foren zusammen"geklaut". die paar phrasen c++/cli wurden mir aber so empfohlen für meine zwecke, aber da ich das sonst nicht kann, bin ich da auf herkömmliches c++ zurückgewichen.

    edit: der angesprochene thread aus nem anderen forum: http://forum.worldofplayers.de/forum/showthread.php?t=853820



  • keiner der mir mal konkreter was sagen kann, wie ich das in "schönem" c++ hinbekomme?


Anmelden zum Antworten