我想将__int64作为参数传递给我的Thread。这是我目前的代码:
void thisismymainfunc( ..., __int64 license, ... )
{
CreateThread(NULL, NULL, checkLicBan, (LPVOID)license, NULL, NULL);
}
线程的代码:
DWORD WINAPI checkLicBan(LPVOID m2dlic)
{
cout << (__int64)m2dlic << endl;
原始__int64是:
640810053458582
cout-ed int是:
932995186
有人能告诉我怎么能把这么大的号码传递给我的帖子?
谢谢!
答案 0 :(得分:5)
不要将64位整数转换为指针。在32位应用程序中,将其切成两半。你正在打印的是整数的下半部分,它适合32位指针(感谢小端的魔力)
您要么传递一个持久(和线程安全)64位整数的地址,就像这样
CreateThread(NULL, NULL, checkLicBan, &my_persistent_64bit_integer, NULL, NULL);
然后像这样访问它
DWORD WINAPI checkLicBan(LPVOID m2dlic)
{
cout << *((__int64*)m2dlic) << endl;
或者,如果您无法保留该值,请动态分配它并在您的处理程序中删除它,如此
void thisismymainfunc( ..., __int64 license, ... )
{
CreateThread(NULL, NULL, checkLicBan, new __int64(license), NULL, NULL);
}
然后像这样访问它
DWORD WINAPI checkLicBan(LPVOID m2dlic)
{
__int64* pval = (__int64*)m2dlic
__int64 myval = *pval;
delete pval;
cout << myval << endl;