代码之家  ›  专栏  ›  技术社区  ›  sharptooth

如何处理围绕使用farproc调用getprocaddress的c4191警告?

  •  9
  • sharptooth  · 技术社区  · 13 年前

    最近我尝试使用 /Wall Visual C++ option 要启用所有警告并发现以下代码:

    typedef BOOL ( WINAPI * TIsWow64ProcessFunction )( HANDLE, BOOL* );
    TIsWow64ProcessFunction isWow64ProcessFunction = reinterpret_cast<TIsWow64ProcessFunction> (
        ::GetProcAddress( kernel32DllHandle, "IsWow64Process" ) );
    

    产卵 C4191 :

    warning C4191: 'reinterpret_cast' : unsafe conversion from 'FARPROC' to 'TIsWow64ProcessFunction'
    Calling this function through the result pointer may cause your program to fail
    

    如果我使用C样式的强制转换,同样的警告会出现,但现在它提到“类型强制转换”而不是“重新解释强制转换”。

    对于我打电话的任何情况,都会重复同样的警告 GetProcAddress() 并将其返回值转换为一些可用的函数指针。

    如何处理这些警告?我需要修改我的代码吗?

    3 回复  |  直到 8 年前
        1
  •  7
  •   Sliq    8 年前

        2
  •  6
  •   Community Egal    7 年前

    Normally , this type of coercion would be a serious bug hiding in your application

    GetProcAddress

    1. #pragma warning(suppress: 4191)
      



    2. FARPROC void*

      typedef BOOL ( __stdcall *TIsWow64ProcessFunction )( HANDLE, BOOL* );
      
      TIsWow64ProcessFunction isWow64ProcessFunction =
          reinterpret_cast<TIsWow64ProcessFunction>(
             reinterpret_cast<void*>(
             ::GetProcAddress(hInstance, "IsWow64Process")));
      

        3
  •  2
  •   Puppy    13 年前