0

USBポートから更新通知が送信されるように、ディスプレイドライバーを変更します。これまでのところは順調ですが、次の在庫があります。

    GPEFlat::GPEFlat()
{
    PBOOT_ARGS args;
    ULONG      fbSize;
    ULONG      fbOffset;
    ULONG      offsetX;
    ULONG      offsetY;
    BOOL       bFoundArgs = FALSE;

    BOOL        m_MouseDisabled = TRUE;
    HANDLE      m_hAttachEvent = CreateEvent(NULL, FALSE, FALSE, L"MouseAttached");
    HANDLE      m_hDetachEvent = CreateEvent(NULL, FALSE, FALSE, L"MouseDetached");
    HANDLE      m_hCursorThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MouseEventThread, NULL, 0, NULL);

DWORD 
GPEFlat::MouseEventThread(void)
{
    DWORD   rc = TRUE;
    HANDLE  handles[2];
    handles[0] = m_hAttachEvent;
    handles[1] = m_hDetachEvent;

結果のエラーは次のとおりです: エラー 1 エラー C2440: 'type cast' : cannot convert from 'overloaded-function' to 'LPTHREAD_START_ROUTINE' drivers\display\vgaflat

したがって、行: HANDLE m_hCursorThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MouseEventThread, NULL, 0, NULL); 動作しません。非静的メソッドである可能性があるいくつかのポインターを取得しました。どうすればいいですか?ご挨拶

4

2 に答える 2

0

理解しておくべきことは、関数 (静的メソッドを含む) と非静的メソッドは別物だということです。CreateEvent関数を期待します。GPEFlat::MouseEventThreadそれを指定する必要があります。これはメソッドであるため、機能しません。ただし、できることは、を呼び出す関数を与えることですGPEFlat::MouseEventThread。通常、これはこのように行われます

DWORD WINAPI thread_starter(LPVOID that)
{
    return ((GPEFlat*)that)->MouseEventThread();
}

...

CreateThread(NULL, 0, thread_starter, this, 0, NULL);

に渡すことに注意してくださいthis。これCreateThreadは非常に重要です。これは、ずっと呼び出したかったメソッドを呼び出すために使用されCreateThreadます。thatthread_starterthat

于 2013-10-04T13:17:21.803 に答える