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

Reply via email to