Problem mit GetPrivateProfileString

Encor3

Mitglied
ich hab ne teams.ini datei die folgendermaßen aussieht:

PHP:
[teams]
10= Team1
11= Team2
12= Team3
....


Dabei soll halt "Team1 vs. Team2" ausgegeben werden...

Hier der Ausschnitt aus der c++ datei:

PHP:
TCHAR szDirectory[MAX_PATH * 2];
GetModuleFileName(NULL, szDirectory, (sizeof(szDirectory) / sizeof(szDirectory[0])));
PathRemoveFileSpec(szDirectory);
char szConfigFile[MAX_PATH];
strcpy(szConfigFile, szDirectory);
strcat(szConfigFile, "\\teams.ini");
int wert1 = 1;
int keyA = 10*wert1 + 2;
char Test[500];

DWORD destSize; 
destSize=500; 
char iMatches =GetPrivateProfileString("teams","keyA","NULL",Test,destSize,szConfigFile);

Die Zeile int keyA = 10*wert1 + 2; mag eventuell etwas komisch wirken aber das liegt daran dass diese variable aus dem system abgefragt wird und nicht gleich den wert anzeigt der in der ini datei steht....

Leider wird hier nicht TeamX ausgegeben sondern irgendeine Zahl... :/
die Ausgabe habe ich so probiert:

printf("%d gegen!\n", iMatches);

und auch schon so:

printf("%d gegen!\n", Test);
 
Du bekommst in iMatches die Anzahl der Bytes die in den char-Buffer kopiert worden sind. Das ist also schon mal daneben.

Du bekommst den Inhalt in Test gepackt, Test ist allerdings ein String. Den musst du mit %s statt %d ausgeben, sonst bekommst du die Adresse des Strings im Speicher ausgegeben.

printf( "%s gegen!\n", Test );
 
hmmm irgendwie kommt dann "Kein Team" aber ich glaube das liegt daran, dass ich "keyA" geschrieben habe und der das wohl als String und nicht als Variable versteht, bzw. um es genau zu sagen ich stehe auf der Leitung. Aber auf jedenfall kommt jetzt der "Standartwert" wenn ich deinen Tipp befolge Endurion und das ist schonmal ein Fortschritt :)

wenn ich das keyA nicht in "" setze kommt beim Kompilieren die Meldung

"invalid conversion from `int' to `const CHAR*'
 
Zuletzt bearbeitet:
Du kannst da nicht einen Variablennamen angeben. Nach dem Aufruf ist der Inhalt des Wertes in dem Char-Puffer Test enthalten.
Mit atoi kriegst du ihn da raus:

keyA = atoi( Test );
 
verstehe nicht ganz was du meinst,bzw. wie ich es damit schaffe dass er die variable doch erkennt. Wenn ich in die ini datei keyA=Team00 wird "Team00 gegen" ausgegeben, d.h. es liegt in der Tat daran, dass dieses "keyA" als String angesehen wird :(
 
Ach, ich Hirn, jetzt verstehe ich endlich, was du gemeint hast. Mein Fehler.

Du setzt in keyA den Wert rein, den du auslesen willst. In GetPrivateProfileString musst du allerdings einen String übergeben. Wenn du nun "keyA" schreibst, wird der Key namens "keyA" gesucht, da sollte aber der Wert drinstehen: "10", "11", usw.

Da musst du nur deinen Wert in einen String umwandeln:

char szTemp[200];
wsprintf( szTemp, "%d", keyA );

GetPrivateProfileString( "teams", szTemp, "NULL",Test,destSize,szConfigFile);
 
Zurück