VC++ && C::B



  • Hi,

    Ich weiß nicht so,...
    mit VC++ kann ich mein Projekt übersichtlicher halten und habe dort etwas mehr Erfahrungen als in C::B.

    Jedoch, wenn es dann um WINAPIs geht, werde ich wahnsinnig 😞
    Ich schreibe nämlich grade an einer kleinen Remoteunterstützung und da bin ich ziemlich auf die WINAPI angewiesen.

    Jedenfalls zum Problem:

    Anscheinend hat VC++ seine eigene Regel, was LPWSTR und den Funktionen angeht.

    Gebe ich zum Beispiel: (in VC++)

    char ComputerName[255];
    	Size = sizeof( ComputerName );
    	GetComputerName(ComputerName,&Size);
    	std::cout << "Computername: " << ComputerName << std::endl;
    

    Gibt er mir 1 Fehler:

    Fehler 3 error C2664: 'GetComputerNameW': Konvertierung des Parameters 1 von 'char [255]' in 'LPWSTR' nicht möglich 114

    Hmmm, in C::B kompiliert er das 100% fehlerfrei,... was müsste ich immer beachten bei VC++? Gibt es eine Einstellung für WINAPIs oder etwas ähnliches.

    Bitte um Entschuldigung, wenn dies das falsche Forum ist, war am Überlegen ob WINAPI oder Compiler-und IDE-Forum richtig wäre.

    Gruß Mentras



  • Mentras schrieb:

    Jedenfalls zum Problem:

    Anscheinend hat VC++ seine eigene Regel, was LPWSTR und den Funktionen angeht.

    Gebe ich zum Beispiel: (in VC++)

    char ComputerName[255];
    	Size = sizeof( ComputerName );
    	GetComputerName(ComputerName,&Size);
    	std::cout << "Computername: " << ComputerName << std::endl;
    

    Gibt er mir 1 Fehler:

    Fehler 3 error C2664: 'GetComputerNameW': Konvertierung des Parameters 1 von 'char [255]' in 'LPWSTR' nicht möglich 114

    Nein, VC++ macht nichts falsch, sondern C::B. Richtig müsste dein Code eigentlich so lauten:

    char ComputerName[255];
        Size = sizeof( ComputerName );
        GetComputerNameA(ComputerName,&Size);
        std::cout << "Computername: " << ComputerName << std::endl;
    


  • Ah,

    jetzt müsste ich dich noch fragen was das 'A' hinter der Funktion bedeutet?

    Dann würde ich es verstehen. 🙂

    Danke aber für deine Antwort!



  • Mentras schrieb:

    jetzt müsste ich dich noch fragen was das 'A' hinter der Funktion bedeutet?

    Bei Windows-Funktionen, die in irgendeinem Zusammenhang mit C-Strings stehen, ist es manachmal Notwendig zwischen dem 'W' und dem 'A' am Schluss zu unterscheiden.

    'A' bedeutet: Die Funktion arbeitet mit herkömmlichen C-Strings (char*)
    'W' bedeutet: Die Funktion arbeitet mit UNICODE-C-Strings (wchar_t*)

    solche Strings werden dann auch anders initialisiert:

    char*    ansi_string    = "Ein ANSI-String";
    wchar_t* unicode_string = L"Ein UNICODE-String";
    

    Das voranstehende L ist hierbei nötig, weil es angibt, dass "breite Zeichen" verwendet werden.

    Im übrigen: Es machen weder VC++ noch C::B etwas falsch:
    Bei VC++ war bei deinen Projekteinstellungen lediglich der Zeichensatz auf UNICODE umgestellt, was den Compiler veranlasst, GetComputerName() als GetGomputerNameW() zu interpretieren.
    In C::B ist das Symbol UNICODE nicht standardmäßig definiert, weshalb der Compiler dann auch die Funktion GetComputerNameA() einsetzt.



  • Ich danke dir 😋

    Jetzt weiß ich endlich was das 'A' und 'W' bedeutet x)


Anmelden zum Antworten