首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-06-02 
LPVOID类型赋值疑惑我知道LPVOID是指向任何类型指针的数据类型那么请看下面C/C++ codeDWORD dwStart::Get

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类型。

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

热点排行