我在 Delphi 7 中的某些功能中有以下代码:
var
objServiceConfig: PQueryServiceConfigA;
...
...
objServiceConfig:= AllocMem(anySize);
...
...
QueryServiceConfig(hSCService, objServiceConfig, anySize, anySize2)
.....
.....
我收到错误:E2010 Incompatible types: 'LPQUERY_SERVICE_CONFIGW' and 'PQueryServiceConfigA'
在 Delphi 7 中一切正常,但将其迁移到 Delphi XE4,我收到此错误。
当我将上述声明更改为objServiceConfig: PQueryServiceConfigA;
有效objServiceConfig: LPQUERY_SERVICE_CONFIG;
时。是对的还是我还需要做什么?
更新:
在 Delphi XE4 WinSvc 中,QueryServiceConfig 声明如下
function QueryServiceConfig(hService: SC_HANDLE;
lpServiceConfig: LPQUERY_SERVICE_CONFIG; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM QueryServiceConfigA}
function QueryServiceConfigA(hService: SC_HANDLE;
lpServiceConfig: LPQUERY_SERVICE_CONFIGA; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM QueryServiceConfigW}
function QueryServiceConfigW(hService: SC_HANDLE;
lpServiceConfig: LPQUERY_SERVICE_CONFIGW; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
在 Delphi7、WinSvc、QueryServiceConfig 中声明如下
function QueryServiceConfig(hService: SC_HANDLE;
lpServiceConfig: PQueryServiceConfig; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM QueryServiceConfigA}
function QueryServiceConfigA(hService: SC_HANDLE;
lpServiceConfig: PQueryServiceConfigA; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM QueryServiceConfigW}
function QueryServiceConfigW(hService: SC_HANDLE;
lpServiceConfig: PQueryServiceConfigW; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
这意味着 Delphi 7 的第二个参数是PQueryServiceConfig
/A/W 类型,而 Delphi XE4 是LPQUERY_SERVICE_CONFIG
/A/W类型