Domanda

I have the following code:

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

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

When I call sys.sleep(), the application crashes. Why does the program crash, and what can I do to resolve the problem?

È stato utile?

Soluzione

Windows.h declares Sleep() like WINBASEAPI VOID WINAPI Sleep(__in DWORD dwMilliseconds);, try telling the compiler it needs to use the proper calling convention when it uses that pointer:

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

sleep = Sleep;

Altri suggerimenti

The only time you should cast a function pointer is when using the return value from GetProcAddress.

Get rid of the cast, and then the compiler will tell you what is wrong.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top