Konvertierung von 'unsigned char [256]' in 'const char *'



  • hallo,

    ich schreibe in vc ein projekt zur prozessüberwachung dazu muss ich einige dinge aus der regstry auslesen. und zwar will ich den pfad einer x-beliebigen exe datei aus der reg auslesen diese in eine variable speichern und anschließend diese exe starten. auslesen funktioniert aber das starten nur wenn ich den pfad absolut in den quelltext schreibe.

    CreateProcess( _T(exe), NULL ,NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    

    mit dieser zeile will ich die exe starten, aber wenn ich es über die variable exe mach kommt folgender fehler:

    Konvertierung des Parameters 1 von 'unsigned char [256]' in 'const char *' nicht moeglich Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    aber diese konvertierung bekomm ich nicht hin! 😡



  • Hi

    Ich gehe davon aus das deine Variable exe wie folgt definiert ist:

    char exe[256];
    

    Wenn ja probier es mal so:

    CreateProcess( &exe, NULL ,NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    

    oder so:

    CreateProcess( ( LPCTSTR ) exe, NULL ,NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    

    MfG
    BlondyBoy



  • ne exe sieht so aus BYTE exe[256]
    warum das so ist weiß ich auch nicht aber es funktioniert und diese Version:

    CreateProcess( ( LPCTSTR ) exe, NULL ,NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    

    haut auch funktioniert, super danke und eigentlich total easy



  • WinDef.h schrieb:

    typedef unsigned char       BYTE;
    


  • edelretter schrieb:

    warum das so ist weiß ich auch nicht aber es funktioniert und diese Version:

    CreateProcess( ( LPCTSTR ) exe, NULL ,NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    

    haut auch funktioniert, super danke und eigentlich total easy

    Die allerdings relativ buggy ist. Sollte jemand das Programm mal mit Unicode CharSet kompilieren, wird er eine böse Überraschung erleben.
    Die einzig korrekte C++ Variante ist folgende

    BYTE exe[256];
    //...
    CreateProcessA(reinterpret_cast<char*>(exe), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    

    btw:
    Das Makro _T ist nur für Literale gedacht.


Anmelden zum Antworten