Это упрощенный сценарий в 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
).
Спасибо.