我如何初始化LPVOID

时间:2018-11-07 03:17:32

标签: c++

我有一个应该向我返回文字的功能。 这是声明:

typedef bool(WINAPI* GetMenuHelpName)(intptr_t dll, LPVOID lpBuffer, int size);

我想我的文字在LpBuffer

GetMenuHelpName func2 = (GetMenuHelpName)GetProcAddress(hGetProcIDDLL, "GetMenuHelpName");
LPVOID lpBuffer;
func2(instance, lpBuffer, 2048);

我收到此错误:

Error C4700 : uninitialized local variable 'lpBuffer' used

如何初始化lpBuffer并将结果放入std:string中?

1 个答案:

答案 0 :(得分:0)

LPVOID类型与void*完全相同,这意味着指向没有特定类型的对象的指针。同样,就目前而言,lpBuffer并未指向任何对象,因为它尚未初始化。初始化此指针的主要方法有两种:在堆上还是在栈上。要初始化堆栈,请将其初始化为char数组:

char lpb[1000]; // Or however much space
LPVOID lpBuffer = (LPVOID) lpb;

要在堆上初始化,请使用malloc(内存分配)函数。这会在某处分配一些空间并返回指向它的指针。只要记得在完成将空间退还给OS时调用它上的free

#include <stdlib.h> // malloc, free

// ...

LPVOID lpBuffer = malloc(1000); // pick your space

// ...

free(lpBuffer);              // release the space

关于转换为std::string的信息,请参见page