You are not looking at the return value of GetBindString()
to make sure it outputs any data.
Using a single POleStr
is fine if you are retrieving a specific header, eg:
function THandler.Start(szUrl: PWideChar; OIProtSink: IInternetProtocolSink; OIBindInfo: IInternetBindInfo; grfPI, dwReserved: DWORD): HResult; stdcall;
var
MimeType: POleStr;
Fetched: ULONG;
begin
if Succeeded(OIBindInfo.GetBindString(BINDSTRING_POST_DATA_MIME, @MimeType, 1, Fetched)) then
begin
// use MimeType as needed...
CoTaskMemFree(MimeType);
end;
Result := INET_E_USE_DEFAULT_PROTOCOLHANDLER;
end;
However, you are trying to retrieve multiple headers, so you need to use an array instead:
function THandler.Start(szUrl: PWideChar; OIProtSink: IInternetProtocolSink; OIBindInfo: IInternetBindInfo; grfPI, dwReserved: DWORD): HResult; stdcall;
var
Headers: array[0..255] of POleStr;
Fetched, I: ULONG;
begin
Fetched := 0;
if Succeeded(OIBindInfo.GetBindString(BINDSTRING_HEADERS, @Headers[0], Length(Headers), Fetched)) then
begin
if Fetched > 0 then
begin
for I := 0 to Fetched-1 do
begin
// use Headers[I] as needed...
CoTaskMemFree(Headers[I]);
end;
end;
end;
Result := INET_E_USE_DEFAULT_PROTOCOLHANDLER;
end;
That being said, MSDN says that BINDSTRING_HEADERS
is "Not currently supported".