[C] iniFile -> GetPrivateString -> Was mach ich falsch?

MC Breit

Erfahrenes Mitglied
Hallo!

Ich schreibe gerade ein kleines WinRemote für ein php\gtk tool.
Dieses benutzt ini files, zum sichern der einstellungen.
Ich brauche den pfad zu php.
Dieser befindet sich in der config.ini, welche zb so aussehen könnte:
Code:
[settings]
php_path=C:\Programme\PHP-GTK\php_win.exe
langfile=de1

[lastusedata]
file=C:\Programming\TeamOrga\dev\sample.tod
timestamp=false
Jetzt hab ich mir gedacht, könnte ich den einfach folgendermaßen in php_path bekommen:
Code:
GetPrivateProfileString("settings", "php_path", "C:\\php4\\php.exe", php_path, NULL, "config.ini");
Anscheinend falsch gedacht..
Denn php_path hat dannach vollgenden wert: ê$?
php_path ist ein char* (So nebenbei^^)

Währe dankbar, wenn ihr mir weiterhelfen könntet ;)
 
Soweit ich weiss, muss GetPrivateProfileString einen absoluten Pfad zur .ini-Datei haben, sonst sucht es nur im Windows-Ordner.

Ein char* reicht da übrigens nicht, wenn du es nicht ge-new-ed hast. Alloziiere entweder ein char-Array (new char[200]) oder benutze ein fixes Array.
 
Also, dann müsste ich als php_path als char php_path[258] (maximale länge) deklarieren?

Dann bleibt aber noch ein problem, welches ich soweiso später bekomme, und zwar, wie bekomme ich den absoluten pfad zu dem verzeichniss der anwendung selbst herraus?

Also, in argv[0] hab ich ja den ganzen pfad, mit dateinamen, dann müsst eine funktion "dirname" zb einfach beim letzten \ abtrennen, oder kann da was dazwischen kommen? Oder villeicht bessere lösung dafür?

Ich rpobier das jetzt mal aus, wenn ich ihn einfach absolut angebe..

~~EDIT~~
Also, ich habs jetzt ausprobiert, so wie du meintest, und es passiert genau das gleiche, nämlich ein fehler beim ausführen^^ bzw php_path hat jetzt den wert "p$?"..

Code:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
     
int main(int argc, char *argv[])
{
  char php_path[258], *file_to_run;

  //Get the path to php (*php_path)..
  GetPrivateProfileString("settings", "php_path", "C:\\php4\\php.exe", php_path, NULL, "D:\\Programming\\TeamOrga\\dev\\win-remote\\config.ini");
  
  file_to_run = "D:\\Programming\\TeamOrga\\dev\\TeamOrga.php-gtk";
  
  ShellExecute(NULL, NULL, php_path, file_to_run, NULL, SW_HIDE);
  return 0;
}
 
Zuletzt bearbeitet:
Der vorletzte Parameter sollte übrigens die Grösse des Puffers sein, den du zur Verfügung stellst, also im letzten Beispiel 258, nicht 0.
 
*muhaaahahaha* Es geht, *froi*
Ok, Danke! Jetzt hab ich auch verstanden, was bei den PrivateXXX funktionen gemeint ist..

Jetzt hab ich nurnoch das prob mit dem absoluten pfad..
Also, ich muss ja von der eigenen datei aus, das dir rausbekommen, jetzt hab cih mir gedacht, einfach agrv[0] nehmen, und dann hinten abschneiden bis zum ersten \..

Aber die exe hängt sich dauernd auf..
Ich denke mal das ich da rigendwas mit den argumenten falsch mache..
Hier mal mein Code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void dirname(char *path)
{
  int split=0, i=0;
  char *npath;
  //Einmal für die ganez stringlänge von hinten nach vorne durchgehen..    
  for( i=strlen(path); i>=0; i--)
  {
    if( split != 1 && path[i] == "\\" )
    {
      //Split auf 1 setzen, damit der rest in den neuen string geschrieben wird..
      split = 1;
    }
    else
    {
      //Letzes zeichen an neuen string anhängen..
      sprintf(npath, "%s%s", npath, path[i]);
      printf("Current string: %s\n", npath);
    }
  }  
  //Altem string den neuen zuweisen..
  path = npath;
}
     
int main(int argc, char *argv[])
{
  char php_path[800], *file_to_run, *dir;

  //Get the path to php (*php_path)..
  GetPrivateProfileString("settings", "php_path", "C:\\php4\\php.exe", php_path, 800, "D:\\Programming\\TeamOrga\\dev\\win-remote\\config.ini");

  dir = argv[0];

  //Extract dirname..
  dirname(&dir);
  printf("Dirname: %s\n", dir);
  system("PAUSE");
  
  file_to_run = "D:\\Programming\\TeamOrga\\dev\\TeamOrga.php-gtk";
  
  ShellExecute(NULL, NULL, php_path, file_to_run, NULL, SW_HIDE);
  return 0;
}

Also, ihr könnt mir da ja sicher nochmal weiterhelfen..
 
Zurück