Я хотел бы передать __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
Может кто-нибудь сказать мне, как я мог передать такой большой номер в мою ветку?
Спасибо!
Не приводите 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;