RawInput APIを使用して入力デバイスの名前を取得しようとしていますが、名前文字列を割り当てると奇妙なエラーが発生します。基本的に、これは完全に機能する別のプロジェクトで見られました。これは欠陥のあるコードです。
std::string Input::GetDeviceName(void* device)
{
size_t size;
bool result = GetRawInputDeviceInfo(device, RIDI_DEVICENAME, null, &size) ;
if(result < 0)
{
throw RawInputException(GetLastError(), L"GetRawInputDeviceInfo(InputDeviceDataRequest::Name)");
}
std::vector<std::string::value_type> data(size);
result = GetRawInputDeviceInfo(device, RIDI_DEVICENAME, &data[0], &size);
if(result < 0)
{
throw RawInputException(GetLastError(), L"GetRawInputDeviceInfo(InputDeviceDataRequest::Name)");
}
std::string name = std::string(data.cbegin(), data.cend());
return(name);
}
同じコードは、私が読んだチュートリアルの実装でも正常に機能しましたが、それを使用すると、* HeapAlloc(_crtheap、0、size?size:1); *でブレークポイントがトリガーされ、 stdからコールスタックの10レベル下になります。 :string _name = std :: string(data.cbegin()、data.cend()); 。ベクトルの値を確認しました。サイズは61です。問題は実際の内容にあると思いますが、std :: string :: value_type?GetRawInputDeviceInfo()で何が問題になる可能性があるので、正常に入力されました。ベクトルをcharsでアップしますそして私が言ったように、私がそれを読んだチュートリアルコードはビルドされて完全に実行されました興味のある人のために、ここにプロジェクトへのリンクがあります:男はそれを更新しなくなりましたが、ほぼ完全に機能します