Передайте __int64 в параметр CreateThread

Я хотел бы передать __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

Может кто-нибудь сказать мне, как я мог передать такой большой номер в мою ветку?

Спасибо!

2

Решение

Не приводите 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;
5

Другие решения


По вопросам рекламы [email protected]