Как включить HINSTANCE, не прибегая к const_cast? - PullRequest
0 голосов
/ 12 марта 2019

Название уже произнесено.

См. Пример из реального мира, см .: https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-findexecutablea

, который возвращает HINSTANCE - тип указателя - который в некоторых случаях может принимать предопределенные значения ошибок.

Желательно, чтобы я включил HINSTANCE и сделал это, не прибегая к const_cast или приведению в стиле c - как этого можно достичь?

Пример кода:

bool test_result(const HINSTANCE ptr) {
  switch (ptr) {
  case 2 /*SE_ERR_FNF*/:
    return false;
  default:
    return true;
  }
}

Ответы [ 2 ]

3 голосов
/ 12 марта 2019

для преобразования указателя (HINSTANCE - просто пустота *) в int you reinterpret_cast в uintptr_t.Как это:

bool test_result(const HINSTANCE ptr)
{
  switch (reinterpret_cast<uintptr_t>(ptr))
  {
  case 2 /*SE_ERR_FNF*/:
    return false;
  default:
    return true;
  }
}
2 голосов
/ 12 марта 2019

Я провел некоторое тестирование самостоятельно, потому что этот тип возврата не имеет особого смысла, но по какой-то причине WinAPI действительно возвращает void*.В этом случае фактическим возвращаемым значением является адрес, на который указывает void*.Таким образом, вы можете разыграть его с помощью reinterpret_cast и включить его:

bool test_result(const HINSTANCE ptr) {
  switch (reinterpret_cast<uintptr_t>(ptr)) {
  case 2 /*SE_ERR_FNF*/:
    return false;
  default:
    return true;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...