"LPVOID" не может быть назначен объекту типа X

Я имею дело с функцией, которая имеет дело с USB-устройствами.

Но у меня уже есть проблема в чем-то простом:

Я получаю ошибку компилятора

A value of the type "LPVOID" can not be assigned to an entity of the type "PSP_DEVICE_INTERFACE_DETAIL_DATA" in the line 
"DevIntfDetailData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize);"

Может ли кто-нибудь сказать мне, что я здесь делаю не так? Спасибо!

PSP_DEVICE_INTERFACE_DETAIL_DATA DevIntfDetailData;
DevIntfDetailData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize);

1 ответ

Решение

Это должно работать:

DevIntfDetailData = reinterpret_cast<PSP_DEVICE_INTERFACE_DETAIL_DATA>(HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize));

HealAlloc (как и все другие функции alloc) возвращает указатель на кучу памяти (void*), и C++ не может разрешить устанавливать значение типа T* в значение типа void * без приведения вручную.

Существуют dynamic_cast, static_cast, reinterpret_cast и const_cast. Когда вы хотите преобразовать void * в любой указатель, вы должны использовать reinterpret_cast, потому что он конвертирует типы без какой-либо проверки (преобразование void * в любой T* не пройдет никакой проверки).

Другие вопросы по тегам