Это упрощенный сценарий, в Delphi 7:Можно ли использовать вложенную процедуру метода в качестве обратного вызова winapi?
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' кажется попрошайничеством за ошибки. :-) –