Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将DIDEVICEINSTANCE tszProductName打印到Windows控制台时出现问题_C++_Windows_Unicode_Wchar_Directinput - Fatal编程技术网

C++ 将DIDEVICEINSTANCE tszProductName打印到Windows控制台时出现问题

C++ 将DIDEVICEINSTANCE tszProductName打印到Windows控制台时出现问题,c++,windows,unicode,wchar,directinput,C++,Windows,Unicode,Wchar,Directinput,我一直在关注一个问题,在将列表打印到Windows控制台时遇到问题 我使用VS19的C++编译器,用Unicode定义了AM编译。由于tszProductName是TCHAR类型,解析为WCHAR,因此我遵循该命令,以允许windows控制台打印unicode,同时避免在同一程序中混合wcout和cout 在我做这些更改之前,没有打印任何内容。现在控制台打印出쳌' 对每个设备名称重复。我试着从Unicode切换到多字节,然后又回到cout,但没有成功。这是有问题的代码 #定义DIRECTINPU

我一直在关注一个问题,在将列表打印到Windows控制台时遇到问题

我使用VS19的C++编译器,用Unicode定义了AM编译。由于tszProductName是TCHAR类型,解析为WCHAR,因此我遵循该命令,以允许windows控制台打印unicode,同时避免在同一程序中混合wcout和cout

在我做这些更改之前,没有打印任何内容。现在控制台打印出쳌' 对每个设备名称重复。我试着从Unicode切换到多字节,然后又回到cout,但没有成功。这是有问题的代码

#定义DIRECTINPUT_版本0x0800
#包括
#pragma注释(lib,“dinput8.lib”)
#pragma注释(lib,“dxguid.lib”)
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
IDirectInput8*开发;
矢量控制器;
布尔回调枚举控制器(LPCDIDEVICEINSTANCE devInst、LPVOID pvRef){
LPDIRECTINPUTDEVICE8游戏控制器;
if(失败(dev->CreateDevice(devInst->guidInstance,&gameController,NULL)))
返回DIENUM_继续;
否则{
游戏控制器。推回(游戏控制器);
返回DIENUM_继续;
}
}
int wmain(int argc,wchar_t*argv[]){
HANDLE hConsole=GetStdHandle(标准输出句柄);
char*a=setlocale(LC_ALL,“en-US.UTF8”);
设置控制台输出CP(CP_UTF8);
SetConsoleCP(CP_UTF8);
CONSOLE_FONT_INFOEX fontInfo;
fontInfo.cbSize=sizeof(fontInfo);
fontInfo.FontFamily=20;
fontInfo.FontWeight=400;
fontInfo.nFont=0;
const wchar_t myFont[]=L“Lucida控制台”;
fontInfo.dwFontSize={8,16};
std::copy(myFont,myFont+_countof(myFont),fontInfo.FaceName);
SetCurrentConsoleFontEx(hConsole、false和fontInfo);
if(失败(DirectInput8Create(GetModuleHandle(NULL)、DIRECTINPUT_版本、IID_IDirectInput8(void**)和dev,NULL))){
std::wcout EnumDevices(DI8DEVCLASS_GAMECTRL和enumGameControllers,NULL,DIEDFL_ATTACHEDONLY))){
标准::wcout
此代码的问题在于:

  • 未按要求初始化,以及

  • 未检查的返回值是否存在错误

改为以下内容

    DIDEVICEINSTANCE deviceInfo = { sizeof(DIDEVICEINSTANCE) };
    if(i->GetDeviceInfo(&deviceInfo) != DI_OK) { /* call failed, handle error */ }
此代码的问题在于:

  • 未按要求初始化,以及

  • 未检查的返回值是否存在错误

改为以下内容

    DIDEVICEINSTANCE deviceInfo = { sizeof(DIDEVICEINSTANCE) };
    if(i->GetDeviceInfo(&deviceInfo) != DI_OK) { /* call failed, handle error */ }