小编yan*_*kee的帖子

使用方法的嵌套过程作为winapi回调是否安全?

这是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).

谢谢.

delphi callback delphi-7

11
推荐指数
2
解决办法
288
查看次数

标签 统计

callback ×1

delphi ×1

delphi-7 ×1