Exception Installshield:EnumServicesStatus引发异常问题

Exception Installshield:EnumServicesStatus引发异常问题,exception,prototype,installshield,Exception,Prototype,Installshield,我是installshield的新手,现在,我遇到了一个问题 请看下面的Windows定义: BOOL WINAPI EnumServicesStatus( _在uu scu HANDLE hSCManager中, _在DWORD dwServiceType中, _在德沃德州, _Out_opt_LPENUM_服务_状态lpServices, _在德沃德cbBufSize, _如果需要的话, _Out_uulpdwordLPSERVICES已返回, _Inout_opt_uuDWORDLPRes

我是installshield的新手,现在,我遇到了一个问题

请看下面的Windows定义:

BOOL WINAPI EnumServicesStatus(
_在uu scu HANDLE hSCManager中,
_在DWORD dwServiceType中,
_在德沃德州,
_Out_opt_LPENUM_服务_状态lpServices,
_在德沃德cbBufSize,
_如果需要的话,
_Out_uulpdwordLPSERVICES已返回,
_Inout_opt_uuDWORDLPResumeHandle
);
我的installshield脚本中的原型是:

prototype BOOL AdvAPI32.EnumServicesStatus(INT,INT,INT,POINTER,INT,POINTER,POINTER);
功能流程:

INT-mgrHandle;
数字nSize,nRet;
指针服务;
开始
nSize=0;
nRet=0;
尝试AdvAPI32.EnumServicesStatus(mgrHandle、SERVICE\u WIN32、SERVICE\u STATE\u ALL、lpServices、1024、&nSize、&nRet、NULL);
抓住
MessageBox(FormatMessage(Err.LastDllError),警告);
终渔获物;
它抛出一个异常,消息框显示:操作成功完成。
我不知道出了什么问题?任何帮助都将不胜感激。

也许可以查一下斯特凡·克鲁格的。下面是关于Installscript和服务的一节:

这里的核心问题可能是由于如何准备和传递
lpServices
参数。根据上的MSDN条目,它是“指向包含接收[数据]的枚举服务状态结构数组的缓冲区的指针”。这是告诉您分配内存块并传递其地址的文档。之后,如果函数成功,该块将包含一组格式为的数据


从API的角度来看,您缺少的关键部分是缓冲区的分配。您已经告诉它有1024字节的已分配内存,从
lpServices
中的值开始,但您没有实际分配任何此类内存,甚至没有将
lpServices
设置为指向已知位置。然而,
EnumServicesStatus
不知道这一点,并且会盲目地按照你说的去做。根据所讨论的实际值,异常很可能是由于写入不存在的缓冲区而导致的,并且函数没有机会返回错误代码。

@Glytzhkof:EnumServicesStatuslisp?哈哈,我正在检查不同的语言着色方案以近似Installscript。我一定是贴错了:-)谢谢你的输入,我为“lpServices”分配内存,它可以工作。我现在有另一个问题。我得到了指针“lpServices”,它指向一个缓冲区,该缓冲区包含一个ENUM_SERVICE_状态结构数组,如何获取结构元素?