来自Smalltalk的C电话

时间:2013-05-13 10:27:36

标签: c smalltalk visualworks

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

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

/编辑

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

1 个答案:

答案 0 :(得分:1)

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

像: numItems:= pcbBytesNeeded / self ENUM_SERVICE_STATUS sizeOf。

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