获取VS代码';s C++;intellisense处理WinAPI类型 >,我在VC++程序中使用VIAPI和VS代码。我注意到,标准C++智能感知系统不能很好地与WinAPI的许多宏进行匹配。

获取VS代码';s C++;intellisense处理WinAPI类型 >,我在VC++程序中使用VIAPI和VS代码。我注意到,标准C++智能感知系统不能很好地与WinAPI的许多宏进行匹配。,winapi,visual-studio-code,vscode-settings,Winapi,Visual Studio Code,Vscode Settings,比如说, #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; } #包括 int回调WinMain(HINSTANCE HI

比如说,

#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;
}
#包括
int回调WinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPSTR lpCmdLine、int nCmdShow)
{
消息框(0,“这是一个测试”,“测试”,MB|U OK | MB|U图标信息);
返回0;
}
在上面的代码中,“这是一个测试”和“测试”下会出现错误波形,因为VS代码的intellisense预期这些参数的类型为LPCWSTR,而将它们解释为const char*

不应该是这种情况,因为“这是一个测试”和“测试”作为LPCWSTR是有效的,并且程序编译和运行非常好


我是否可以让intellisense引擎识别出这不是一个错误?或者我必须完全禁用错误波形?

对不起,在这种情况下,VS工作正常


“这是一个测试”是一个字符常量*(LPCSTR),而不是LPCWSTR。对于宽字符串文字,添加'L'前缀:L“这是一个测试”。

实际上,这并不能解决问题。它消除了VS代码中的蠕动错误,但随后会导致编译错误:“错误C2440:'='”:无法从“const wchar__t”转换[16]'对于'LPCSTR'',VS代码似乎需要一个LPCWSTR,而编译器则需要一个LPCSTR。事实证明,我需要在Unicode模式下编译,以使L前缀工作。我仍然希望能够使用VS代码来使用ASCII版本的WinApi,但这将暂时起作用。“这是一个测试。”“的类型为
常量字符[15]
@AnthonyRossello:Windows API没有ASCII版本。大多数函数都有ANSI版本,但如果可能的话,不应该使用它们。当Unicode代码点不能在当前代码页中表示时,在两个方向上的不必要转换会浪费性能,可能会遇到转换问题,并且由于需要执行转换,API调用会任意限制字符串输入的长度。此外,如果答案不能解决你的问题,不要接受。