2

我想将 __int64 作为参数传递给我的线程。这是我当前的代码:

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

谁能告诉我如何将这么大的数字传递给我的线程?

谢谢!

4

1 回答 1

5

不要将 64 位整数转换为指针。在 32 位应用程序中,将其切成两半。您要打印的是适合 32 位指针的整数的下半部分(感谢 little endian 的魔力)

您要么想像这样传递持久(和线程安全)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;
于 2014-07-17T22:20:17.363 回答