2017-11-10 4 views
-1

So umgehen, ich bin mit WinAPI in einem C++ Projekt mit VS-Code. Etwas, das mir aufgefallen ist, ist, dass das Standard-C++ - Intellisense nicht so gut mit den vielen Makros von WinAPI zusammenspielt.Erst VS-Code des C++ intellisense mit WinAPI Typen

Zum Beispiel

#include <windows.h> 

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    MessageBox(0, "This is a test", "Test", MB_OK|MB_ICONINFORMATION); 
    return 0; 
} 

In dem obigen Code, Fehler squiggles erscheint unter „Dies ist ein Test“ und „Test“, weil VS-Code des Intellisense wird diese Parameter erwartet Typ LPCWSTR zu sein, und stattdessen interpretiert sie als const char *.

Dies sollte nicht der Fall sein, wie „Dies ist ein Test“ und „Test“ gelten als LPCWSTRs und das Programm kompiliert und läuft völlig in Ordnung.

Gibt es trotzdem ich die IntelliSense-Engine, dass dies kein Fehler zu erkennen, bekommen ist? Oder muss ich Fehler Squiggles vollständig deaktivieren?

Antwort

1

Sorry, arbeitet VS richtig in diesem Fall.

"Dies ist ein Test" ist ein char const * (LPCSTR), kein LPCWSTR. Fügen Sie für ein breites Zeichenfolgenliteral das Präfix "L" hinzu: L "Dies ist ein Test".

+0

Eigentlich löst das das Problem nicht. Es wird in VS-Code des Fehlers Kringel los, aber dann führt zu einem Übersetzungsfehler als so: „Fehler C2440:‚=‘: nicht von‚const wchar_t [16]‘auf‚LPCSTR‘umwandeln kann‘ Es scheint, wie VS-Code erwartet einen LPCWSTR, während der Compiler ein LPCSTR erwartet. –

+0

Tatsächlich muss ich im Unicode-Modus kompilieren, damit das L-Präfix funktioniert.Ich möchte immer noch VS-Code verwenden können die ASCII-Version von WinApi, aber das wird jetzt funktionieren –

+0

'" Dies ist ein Test "' ist vom Typ 'const char [15]'. @AnthonyRossello: Es gibt keine ASCII-Version der Windows-API.Die meisten Funktionen haben eine ANSI-Version, aber Sie sollten sie nicht verwenden, wenn überhaupt möglich.Sie vergeuden die Leistung bei den unnötigen Konvertierungen in beide Richtungen, leiden möglicherweise unter Problemen mit Konvertierungen, wenn Unicode-Codepunkte nicht in der aktuellen Codepage dargestellt werden können und haben API-Aufrufe arbitrar Sie begrenzen die Länge ihrer String-Eingaben aufgrund der Conversions, die sie ausführen müssen. Wenn eine Antwort Ihre Frage nicht beantwortet, akzeptieren Sie sie nicht. – IInspectable

Verwandte Themen