我可以在C中使用void*
代替LPVOID
吗?
或LPVOID
执行一些特殊功能而不是void*
。
答案 0 :(得分:87)
C中没有LPVOID
类型,它是Windows的东西。
这些事情存在的原因是底层类型可以在不影响源代码的情况下从发行版更改为发布版。
例如,假设早期版本的Microsoft C编译器有一个16位int
和一个32位long
。他们可以简单地使用:
typedef long INT32
,瞧,你有32位整数类型。
现在让我们继续几年,直到Microsoft C使用32位int
和64位long
。为了使您的源代码功能正常,他们只需将typedef
行更改为:
typedef int INT32
这与您在32位整数类型中使用long
时必须执行的操作形成对比。您必须通过所有源代码并确保更改自己的定义。
从兼容性角度(不同版本的Windows之间的兼容性)使用Microsoft的数据类型更清晰。
在回答您的具体问题时,如果不希望 void*
的定义,则可以使用LPVOID
代替LPVOID
变化。
但我不会,以防万一。你永远不知道微软是否会在未来引入一些处理通用指针的不同方式来改变LPVOID
的定义。使用Microsoft的类型并没有真正失去任何东西,但如果他们改变了定义并且您决定使用基础类型,那么可能将来需要做一些工作。
您可能认为指针不会受到这种变化的影响,但是,在创建Windows的最初的8088天中,指针和内存模型(微小的,大的,巨大的等等)存在各种各样的奇怪现象。即使在同一环境中也允许指针具有不同的大小。
答案 1 :(得分:10)
LPVOID
只是typedef
的Windows API void*
。
答案 2 :(得分:2)
LPVOID是
typedef void* LPVOID
在Windef.h
中定义,其中定义了每个windows数据类型。
我们可以使用void *指向任何类型。
答案 3 :(得分:-1)
LPVOID是指向任何类型的指针。 此类型在WinDef.h中声明如下: typedef void * LPVOID;