Hi,
during the migration of my TProxyInfo component to D2009 I get a strange problem
that get me crazy. One API always fail with error 1003 (Cannot complete this
function). The exactly same code with D5 works (it show "XYZT").
I explicitly declared Ansi what must be Ansi, so I really don't understand
what's wrong.
If someone has an idea why it doesn't work, the follow is a sample code:
type
PAutoProxyScriptBuffer = ^AUTO_PROXY_SCRIPT_BUFFER;
AUTO_PROXY_SCRIPT_BUFFER = packed record
dwStructSize: DWORD;
lpszScriptBuffer: LPSTR;
dwScriptBufferSize: DWORD;
end;
TAutoProxyScriptBuffer = AUTO_PROXY_SCRIPT_BUFFER;
TInitializeAutoProxyDll = function (
dwVersion: DWORD;
lpszDownloadedTempFile: LPSTR;
lpszMime: LPSTR;
lpAutoProxyCallbacks: Pointer; //
AutoProxyHelperFunctions*
lpAutoProxyScriptBuffer:
PAutoProxyScriptBuffer
): BOOL; stdcall;
TGetProxyInfo = function (
lpszUrl: LPCSTR;
dwUrlLength: DWORD;
lpszUrlHostName: LPSTR;
dwUrlHostNameLength: DWORD;
out lplpszProxyHostName: LPSTR;
out lpdwProxyHostNameLength: DWORD
): BOOL; stdcall;
TDeInitializeAutoProxyDll = function (
lpszMime: LPSTR;
dwReserved: DWORD
): BOOL; stdcall;
procedure TForm1.Button1Click(Sender: TObject);
var
LibHandle: THandle;
InitializeAutoProxyDll: TInitializeAutoProxyDll;
GetProxyInfo: TGetProxyInfo;
DeInitializeAutoProxyDll: TDeInitializeAutoProxyDll;
ScriptText: AnsiString;
ScriptBuffer: TAutoProxyScriptBuffer;
Url: AnsiString;
Host: AnsiString;
ProxyName: PAnsiChar;
ProxyLength: LongWord;
begin
LibHandle := SafeLoadLibrary('jsproxy.dll');
if LibHandle = 0 then
Exit;
try
@InitializeAutoProxyDll := GetProcAddress(LibHandle,
'InternetInitializeAutoProxyDll');
if @InitializeAutoProxyDll = nil then
begin
ShowMessageFmt('GetProcAddress(''InternetInitializeAutoProxyDll'') failed:
error %d (%s)', [GetLastError, SysErrorMessage(GetLastError)]);
Exit;
end;
@GetProxyInfo := GetProcAddress(LibHandle, 'InternetGetProxyInfo');
if @GetProxyInfo = nil then
begin
ShowMessageFmt('GetProcAddress(''InternetGetProxyInfo'') failed: error %d
(%s)', [GetLastError, SysErrorMessage(GetLastError)]);
Exit;
end;
@DeInitializeAutoProxyDll := GetProcAddress(LibHandle,
'InternetDeInitializeAutoProxyDll');
if @DeInitializeAutoProxyDll = nil then
begin
ShowMessageFmt('GetProcAddress(''InternetDeInitializeAutoProxyDll'')
failed: error %d (%s)', [GetLastError, SysErrorMessage(GetLastError)]);
Exit;
end;
ScriptText := 'function FindProxyForURL(url, host)'#13#10'{'#13#10'return
"XYZT";'#13#10'}'#13#10;
ScriptBuffer.dwStructSize := SizeOf(TAutoProxyScriptBuffer);
ScriptBuffer.lpszScriptBuffer := PAnsiChar(ScriptText);
ScriptBuffer.dwScriptBufferSize := Length(ScriptText) + 1;
if not InitializeAutoProxyDll(0, nil, nil, nil, @ScriptBuffer) then
begin
ShowMessageFmt('InternetInitializeAutoProxyDll() failed: error %d (%s)',
[GetLastError, SysErrorMessage(GetLastError)]);
Exit;
end;
try
Url := 'URL';
Host := 'host';
ProxyName := nil;
try
if not GetProxyInfo(PAnsiChar(Url), Length(Url) + 1, PAnsiChar(Host),
Length(Host) + 1, ProxyName, ProxyLength) then
begin
ShowMessageFmt('InternetGetProxyInfo() failed: error %d (%s)',
[GetLastError, SysErrorMessage(GetLastError)]);
Exit;
end;
ShowMessage(ProxyName);
finally
if ProxyName <> nil then
GlobalFree(HGLOBAL(ProxyName));
end;
finally
if not DeInitializeAutoProxyDll(nil, 0) then
ShowMessageFmt('InternetDeInitializeAutoProxyDll() failed: error %d
(%s)', [GetLastError, SysErrorMessage(GetLastError)]);
end;
finally
FreeLibrary(LibHandle);
end;
end;
Bye, Maurizio.
----------------------------------------------------
This mail has been sent using Alpikom webmail system
http://www.alpikom.it
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be