GetUserName schlägt fehl



  • Hallo,
    ich versuche mich an einem Programm, das Log-Dateien erstellt. Und ich will ein Programm schreiben, dass diese Log-Datei öffnet und deren Inhalt ausgibt.
    Eigentlich habe ich es schon fertig, doch nun will ich GetUserName hinzufügen.
    Hier der Code:

    [code="cpp"]#include <string>
    #include <windows.h>
    using namespace std;

    int main ()
    {
    string dateipfad = "C:\\Windows\\debug\\lerenum.txt";
    ifstream öffnen;
    öffnen.open(dateipfad.c_str(), ios::in);
    cout << öffnen << endl;
    öffnen.close();

    // Implementierung der Funktion GetUsername();
    // #define INFO_BUFFER_SIZE 32767

    // Eine Version um den Benutzernamen zu speichern
    // TCHAR infoBuf[INFO_BUFFER_SIZE];
    // DWORD bufCharCount = INFO_BUFFER_SIZE;
    // GetUserName( infoBuf, &bufCharCount ) ;
    // int a = sizeof(infoBuf);
    // cout << infoBuf[a];

    char *cUserName = 0;
    unsigned long nUserName = sizeof(cUserName);
    GetUserName(cUserName, &nUserName);

    system("PAUSE");
    return 0;
    }[/code="cpp"]

    Ich habe schon mehrere Versionen von GeUserName ausprobiert. Die erste, auskommentierte Version hat keinen syntaktischen Fehler hervorgebracht, aber dafür welche beim Ausühren. Ich habe mich schon überall informiert, nichts hat geholfen.
    Die andere Version funkt nicht, da VC++ mir immer folgende Fehlermeldung ausspuckt:

    Fehler 2 error C2664: 'GetUserNameW': Konvertierung des Parameters 1 von 'char *' in 'LPWSTR' nicht möglich C:\Users\USERNAME\Documents\Projekte\C++\Viewer\Viewer\main.cpp 18



  • Würde ein Moderator den Eintrag bitte in das WinAPI-Unterforum verschieben?
    (VC++ hat nichts mit VCL/C++ Builder zu tun)

    @GetUserName():
    1. Verwende niemals Sonderzeichen (wie Umlaute) in Bezeichnern.
    2. Du linkst mit Unicode-Einstellungen, so dass das Makro GetUserName in die Widestring-Version GetUserNameW aufgelöst wird. Und die Typen char* und LPWSTR (Pointer to Widestring) sind nicht kompatibel.



  • const unsigned long UNLen=1024

    char UN(UNLen];
    unsigned long UNLenCopied=UNLen;

    GetUserName(UN,&UNLenCopied);

    So gehts ohne WChar...

    Gruss
    Frank



  • ...



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Swordfish schrieb:

    DerAltenburger schrieb:

    So gehts ohne WChar...

    Glaubst? Ohne LPWSTR gehts in diesem Fall nur mit GetUserNameA() ...

    Du solltest das, was Du schreibst, auch testen...

    Das geht bei mir schon immer so! Ohne A oder W macht mein Compiler automatisch die A- Version draus. Deshalb geht das ja auch.

    Gruss
    Frank

    PS: Mit dem A ist es natürlich eindeutiger.



  • ...



  • Danke!
    mit GetUserNameA hats geklappt!
    Zum Verständnis (berichtigt mich bitte, wenn ich falsch liege)
    GetUserName ist eine Funktion, die als Formalparameter
    einen Char-Array [darin wird der Benutzername gespeichert, der Index soll die maximale Anzahl an Zeichen in einen Benutzernamen betragen (?)].
    Als 2. Formalparameter wird meine Adresse erwartet, von einer Variable mit dem Typ unsigned long, aber warum die Adresse der Variable?



  • ...



  • KriegeBenutzerName() schrieb:

    Danke!
    mit GetUserNameA hats geklappt!
    Zum Verständnis (berichtigt mich bitte, wenn ich falsch liege)
    GetUserName ist eine Funktion, die als Formalparameter
    einen Char-Array [darin wird der Benutzername gespeichert, der Index soll die maximale Anzahl an Zeichen in einen Benutzernamen betragen (?)].
    Als 2. Formalparameter wird meine Adresse erwartet, von einer Variable mit dem Typ unsigned long, aber warum die Adresse der Variable?

    Der 2. Parameter sagr der Funktion, wievil Platz verfügbar isr (Beim Aufruf)

    Die Adresse brauchts, weil in der Variablen die übertragenben Zeichen eigetragen zurückgegeben werden!

    Gruss
    Frank


Anmelden zum Antworten