gpt4 book ai didi

delphi - E2010 不兼容类型 : 'LPQUERY_SERVICE_CONFIGW' and 'PQueryServiceConfigA' error in Delphi XE4

转载 作者:行者123 更新时间:2023-12-03 15:45:04 25 4
gpt4 key购买 nike

我在 Delphi 7 的某些函数中有以下代码:

 var
objServiceConfig: PQueryServiceConfigA;
...
...
objServiceConfig:= AllocMem(anySize);
...
...
QueryServiceConfig(hSCService, objServiceConfig, anySize, anySize2)
.....
.....

我收到错误:E2010 不兼容的类型:“LPQUERY_SERVICE_CONFIGW”和“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

最佳答案

你应该简单地使用

var
objServiceConfig: PQueryServiceConfig;

在 Delphi 7 中声明为 PQueryServiceConfigA(ANSI 版本),在 Delphi XE4 中声明为 PQueryServiceConfigW(Unicode 版本)。

编辑:

除非您打开“Typed @ operator”编译器选项 ({$T+}),否则会产生编译器错误 E2010 不兼容的类型:'LPQUERY_SERVICE_CONFIGW' 和 'PQueryServiceConfigW'。因此,要么使用该选项,要么简单地重新声明该函数,如下所示:

function QueryServiceConfig(hService: SC_HANDLE; lpServiceConfig: PQueryServiceConfig; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
external advapi32 name {$IFDEF UNICODE}'QueryServiceConfigW'{$ELSE}'QueryServiceConfigA'{$ENDIF};

这样它就可以在 Delphi 7 和 XE4 中编译。

关于delphi - E2010 不兼容类型 : 'LPQUERY_SERVICE_CONFIGW' and 'PQueryServiceConfigA' error in Delphi XE4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19857668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com