1 Востаннє редагувалося Betterthanyou (18.03.2019 01:32:50)

Тема: [delete] Використання параметра як посилання на callback функцію

delete

Є функція з параметром LPVOID lpParam, цей параметр змінювати не можна

DWORD WINAPI myFunction(LPVOID lpParam)
{
...

В цю функцію (myFunction) потрібно передати колбек функцію (myCallback) як параметр lpParam

void myCallback(char *buf)
{
...
}

Я це зробив так

void myCallback(char *buf)
{...код...}
...
myFunction(myCallback); // Викликаю myFunction
...
DWORD WINAPI myFunction(LPVOID lpParam)
{
void(*f)(char*);//створюю потрібний тип
f = reinterpret_cast<void(*)(char*)>(lpParam);//перетворюю LPVOID в void(*)(char*)
...код...
(*f)(buf);//виклик колбек функцію
}

Виникає помилка Exception thrown at 0x0000005C in ***.exe: 0xC0000005: Access violation executing location 0x0000005C.

Чесно кажучи я не розумію як цей рядок працює reinterpret_cast<void(*)(char*)>(lpParam), звісно я читав про Type conversions...,

...converts any pointer type to any other pointer type, even of unrelated classes...

Можна перетворити LPVOID в void(*)(char*) ?

Вже працює - нічого не змінював, не знаю що трапилося... просто перезапустив віжуал студію