这是在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;
整个过程似乎运作良好,但这是真的正确和安全吗?
我喜欢用这种方式封装它,因为它更易读、更干净。我的疑问是嵌套的过程是否是一个简单的、正常的过程,以便它可以有自己的调用约定(stdcall)并安全地引用外部方法的局部变量(pRequest)。谢谢。
pRequest
似乎很容易出错。 :-) - Uli Gerhardt