﻿# V543\. It is suspicious that value 'X' is assigned to the variable 'Y' of HRESULT type\.

Анализатор обнаружил потенциальную ошибку при работе с переменной типа HRESULT\.

HRESULT — это 32\-разрядное значение, разделенное на три различных поля: код серьезности ошибки, код устройства и код ошибки\. Для работы со значением HRESULT служат специальные константы, такие как S\_OK, E\_FAIL, E\_ABORT и так далее\. А для проверки значений тип HRESULT предназначены такие макросы как SUCCEEDED, FAILED\.

Предупреждение V543 выдается в том случае, если в переменную типа HRESULT пытаются записать значение \-1, true или false\. Рассмотрим пример:

```cpp
HRESULT h;
...
if (bExceptionCatched)
{
  ShowPluginErrorMessage(pi, errorText);
  h = -1;
}
```

Запись значения "\-1" некорректна\. Если хочется сообщить о какой\-то непонятной ошибке, то следует использовать значение 0x80004005L \(Unspecified failure\)\. Эта и аналогичные константы, описаны в "WinError\.h"\. Корректный код:

```cpp
if (bExceptionCatched)
{
  ShowPluginErrorMessage(pi, errorText);
  h = E_FAIL;
}
```

Дополнительные ресурсы:

1. MSDN\. [Common HRESULT Values](https://docs.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values)\. 
1. Wikipedia\. [HRESULT](https://en.wikipedia.org/wiki/HRESULT)\.