none
这三条语句在Win32和X64编译模式通用应该怎么改? RRS feed

  • 问题

  • 
    
    
    

    DWORD (WINAPI CMyManger::*pProc)(void) = &CMyManager::Fun1;

    DWORD dwTid;

    HANDLE hl = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(DWORD)(*(DOWRD*)&pProc), this, 0, &dwTid);

    目前在Win32模式下编译没问题,在X64模式下编译&pProc的地址却被截断了,导致错误。

    如果需要它在32位和64位模式下都运行正确,应该怎么改呢。看了LPTHREAD_START_ROUTINE的定义却没看懂。

    
    

    2012年11月9日 2:44

答案

  • 
    

    将最后一条语句换成:

    HANDLE hl = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(HANDLE)(*(HANDLE*)&pProc), this, 0, &dwTid);

    就可以了,虽然不太正规,但HANDLE就是void*嘛。

    • 已标记为答案 sichuanlu 2012年11月9日 4:16
    2012年11月9日 4:16

全部回复

  • 
    

    将最后一条语句换成:

    HANDLE hl = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(HANDLE)(*(HANDLE*)&pProc), this, 0, &dwTid);

    就可以了,虽然不太正规,但HANDLE就是void*嘛。

    • 已标记为答案 sichuanlu 2012年11月9日 4:16
    2012年11月9日 4:16
  • 你好,

    感谢你分享经验。

    你尝试过直接用LPTHREAD_START_ROUTINE,不写*(HANDLE*)吗?


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月12日 8:16
    版主