我正在 delphi 中使用 icmp ping 的实现。现在,我尝试获取人类可读的错误消息,以防设备无法访问,以便我可以将其打印在错误日志中。
您能否向我解释一下如何获得here定义的人类可读的错误代码,而无需执行 switch case 并手动编写字符串。我可以使用 SysErrorMessage、GetIpErrorString 或任何其他 WinApi 或基本 delphi 函数(如果有的话)。
我已经尝试过在互联网上找到的两种方法:
SysErrorMessage 但这导致了不相关的文本。
GetIpErrorString 函数 但我只是无法让它正常工作。我当前的试验只是导致访问冲突或看似随机的字节数组。 当前外部函数定义和方法调用是这样的:
function GetIpErrorString(
const ErrorCode : ULong;
out Buffer : Pointer;
const Size : PDWORD
): DWORD; stdcall; external 'iphlpapi.dll';
var
errorText : string;
bufferSize : Integer;
status : ULong;
ptr : pointer;
begin
// Here is the ping stuff.
// i already verified that this works as the numbers for the
// responseCode are what i would from icmp send error
status := GetLastError();
bufferSize := 200;
GetIpErrorString(
status,
ptr,
@bufferSize
);
SetString(errorText, PChar(ptr), 5);
end
感谢 IInspectable 我现在可以正常工作了。我误解了 delphi 中“out”的作用,这就是访问冲突的来源。所以我将功能更改为
function GetIpErrorString(
const ErrorCode : ULong;
const Buffer : Pointer;
const Size : PDWORD
): DWORD; stdcall; external 'iphlpapi.dll';
并在调用该方法之前将字符串 errorText 初始化为长度 200
SetLength(errorText, bufferSize);
GetIpErrorString(
status,
Pointer(errorText),
@bufferSize
);