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:
Code:
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:
Code:
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:
Code:
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.