【问题标题】:How could I initialize LPVOID我如何初始化 LPVOID
【发布时间】:2019-04-10 12:13:06
【问题描述】:

我有一个应该返回文本的函数。 这是声明:

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

【问题讨论】:

  • 考虑使用malloc 或者像数组一样初始化它。
  • 你必须为缓冲区分配一些内存。你不能只传递一个指向什么都没有的指针并期望得到文本;您必须使内存可用,并且它应该与您告诉它您提供的大小相匹配。想一想 - 你当前的代码说占用这个我没有提供的空间,我告诉你你可以把 2048 字节放入那个不存在的空间。你认为这将如何运作?提示:它的工作原理与将你的空手放在你面前并告诉某人把粪肥铲到我拿着的这个袋子里一样。
  • 通常,如果您打算从缓冲区中复制数据,它将是一个本地数组,您将其地址传递给函数,然后复制返回的数据。

标签: c++


【解决方案1】:

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

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

要在堆上初始化,请使用malloc(内存分配)函数。这会在某处分配一些空间并返回指向它的指针。完成后请记住调用free 以将该空间还给操作系统:

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

// ...

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

// ...

free(lpBuffer);              // release the space

至于转换为std::string,请参阅此page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2023-04-07
    • 2013-06-01
    • 2023-01-16
    • 2011-03-08
    相关资源
    最近更新 更多