0

我正在处理一个处理 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);
4

1 回答 1

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* 都不会通过任何检查)。

于 2014-06-24T16:19:25.533 回答