0

我正在尝试从 VisualWorks中调用EnumServicesStatus 。对于第一次调用,我将参数设置为所需的值,以了解返回的信息需要多少字节(pcbBytesNeeded)。

现在我需要使用 malloc: 为 lpServices 缓冲区分配内存,它需要实例数作为参数。我怎样才能轻松计算出这个?只需将 pcbBytesNeeded 除以 LPENUM_SERVICE_STATUS 结构的大小,我的代码在释放内存时就会崩溃。

/编辑

我在释放内存时解决了崩溃。(我不小心操纵了持有指针的变量)。但是,我在对 Karsten 的评论中提出的问题仍然有效。为什么 ENUM_SERVICE_STATUS 的大小不分 pcbBytesNeeded?这是因为 LPTSTR lpServiceName 和 LPTSTR lpDisplayName 成员吗?

4

1 回答 1

1

您可以将#sizeOf 发送到ENUM_SERVICE_STATUS 结构,类似于C 中的sizeof(ENUM_SERVICE_STATUS)。

类似于:numItems := pcbBytesNeeded / self ENUM_SERVICE_STATUS sizeOf。

还请确保调用 EnumServicesStatusW 函数,因为 EnumServicesStatus 是一个实际指向 EnumServicesStatusW 的宏。

于 2013-05-13T15:26:57.410 回答