【问题标题】:Application crashes, pointer to function is suspect应用程序崩溃,函数指针可疑
【发布时间】:2013-11-01 17:52:19
【问题描述】:

我有以下代码:

#include <windows.h>
class systemfunctions
{
    public:
    void (*sleep) (DWORD ms);

    systemfunctions ()
    {
        sleep = reinterpret_cast<void>(Sleep);
    }
} sys;

当我调用sys.sleep() 时,应用程序崩溃了。程序为什么会崩溃,我该怎么做才能解决这个问题?

【问题讨论】:

  • 你有没有检查过调用时sys.sleep的值是多少?
  • 这段代码甚至不能编译,你不能reinterpret_castvoid。请贴出真实代码。
  • @GManNickG,我错过了public:,补充说。该代码确实可以使用 MSVC 的 cl 编译,但会崩溃。
  • @user2064000:这是 MSVC 中的一个巨大错误……我想知道它甚至会生成什么。我可以告诉你,演员阵容是错误的,所以应该被删除。

标签: c++ casting reinterpret-cast


【解决方案1】:

Windows.h 像 WINBASEAPI VOID WINAPI Sleep(__in DWORD dwMilliseconds); 一样声明 Sleep(),尝试告诉编译器它在使用该指针时需要使用正确的调用约定:

typedef VOID (WINAPI * SleepFunction)(DWORD ms);
SleepFunction sleep;

sleep = Sleep;

【讨论】:

  • 也去掉演员表。
【解决方案2】:

您应该强制转换函数指针的唯一情况是使用来自GetProcAddress 的返回值。

去掉强制转换,然后编译器会告诉你哪里出了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多