如何在不诉诸const_cast的情况下打开HINSTANCE?

问题描述 投票:0回答:2

标题已经说过了。

看现实世界的例子见: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;
  }
}
c++ casting switch-statement c++17
2个回答
2
投票

我自己做了一些测试,因为返回类型没有多大意义,但无论出于何种原因,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;
  }
}

3
投票

用于将指针(HINSTANCE只是一个空*)转换为int reinterpret_castuintptr_t。像这样:

bool test_result(const HINSTANCE ptr)
{
  switch (reinterpret_cast<uintptr_t>(ptr))
  {
  case 2 /*SE_ERR_FNF*/:
    return false;
  default:
    return true;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.