读书人

LPVOID类型赋值疑惑,该如何解决

发布时间: 2012-06-02 14:16:14 作者: rapoo

LPVOID类型赋值疑惑
我知道LPVOID是指向任何类型指针的数据类型
那么请看下面

C/C++ code
    DWORD dwStart=::GetTickCount();    ::TlsSetValue(g_tlsIndex,(LPVOID)dwStart);

为什么第二行不是
::TlsSetValue(g_tlsIndex,&dwStart)

::TlsSetValue函数的第二个参数不是接受地址的吗 为什么不是&dwStart呢?
为什么要把dwStart转换成LPVOID类型再赋值给::TlsSetValue函数的第二个参数呢?

谢谢


[解决办法]
::TlsSetValue(g_tlsIndex,(LPVOID)dwStart);
是把GetTickCount()取到的值保存到TLS

::TlsSetValue(g_tlsIndex,&dwStart)
是把dwStart的地址保存到TLS

两个语句语法上都没错,但语义就不一样了,dwStart应该是一个局部变量,保存局部变量的地址没什么意义
[解决办法]
探讨

h[1]=(HANDLE)::_beginthreadex(NULL,0,ThreadFunc,NULL,0,&uid);
最后一个参数可以写成LPDWORD(uid)吗

[解决办法]
类型不匹配,所以要强制为LPVOID类型。

这里是为了可以传任意类型的东西进去,进去最后再转回来。

读书人网 >C++

热点推荐