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)