这是Delphi 7中的简化方案:
procedure TMyClass.InternalGetData;
var
pRequest: HINTERNET;
/// nested Callback
procedure HTTPOpenRequestCallback(hInet: HINTERNET; Context: PDWORD; Status: DWORD; pInformation: Pointer; InfoLength: DWORD); stdcall;
begin
// [...] make something with pRequest
end;
begin
pRequest := HTTPOpenRequest(...);
// [...]
if (InternetSetStatusCallback(pRequest, @HTTPOpenRequestCallback) = PFNInternetStatusCallback(INTERNET_INVALID_STATUS_CALLBACK)) then
raise Exception.Create('InternetSetStatusCallback failed');
// [...]
end;
Run Code Online (Sandbox Code Playgroud)
整件事似乎工作正常,但它是否真的正确和安全?我希望以这种方式封装它,因为它更具可读性和清洁性.我怀疑嵌套过程是否是一个简单的,正常的过程,因此它可以有自己的调用约定(stdcall)并安全地引用外部方法的局部变量(pRequest).
谢谢.