Jump to content

[Delphi] WinInet niekompletne???


kage20

Recommended Posts

Witam,

dawno nic nie pisałem na forum ale uznałem że warto sie spytać ekspertów od Delphi:)

dlaczego w delphi funkcja z API od WinInet InternetGetCookieEx jest nieznana??

kompilator zwraca mi błąd Undeclared identifier... jak dla mnie to jakieś żarty skoro korzystam z WinAPI i moge uzywać funkcji InternetGetCookie to czemu jej rozszeżona wersja jejst nieznana skoro istnieje w dokumentacji msdn?! Delphi 2007... przez to nie mogę odczytać w Delphi httponly cookies bo standardowa InternetGetCookie ich nie obsługuje... jak w takim razie komponent Indy pod Delphi odczytuje HttpOnly cookies?

 

z góry dzieki mam nadzieje że ktos jest natyle orgarniety w temacie żeby mi odpowiedzieć

pozdrawiam

Link to comment
Share on other sites

CYTAT

(...)

dlaczego w delphi funkcja z API od WinInet InternetGetCookieEx jest nieznana??

(...)

jak dla mnie to jakieś żarty skoro korzystam z WinAPI i moge uzywać funkcji InternetGetCookie to czemu jej rozszeżona wersja jejst nieznana skoro istnieje w dokumentacji msdn?!

(...)

 

Zapytaj na forum Code Geara, mozliwe ze w momencie gdy wydawali D2007 nie bylo jeszcze jej w tej dllce a moze mieli jakis inny powod.

 

 

(...) przez to nie mogę odczytać w Delphi httponly cookies bo standardowa InternetGetCookie ich nie obsługuje(...)

 

No raczej nie, nie mozesz napisac bo szkoda ci poswiecic troche czasu aby sobie napisac wywolanie do dll'ki. Skoro znasz liste paranetrow, nazwe dllki i nazwe metody to mozesz sobie ja recznie dodefiniowac, albo dolinkowac dynamicznie. Ponizej machnelem szybkiego "importa" na bazie dokumentacji, nie sprawdzalem w Delphi czy zadziala pisalem na sucho. Mam nadzieje ze pomoze

 

interface
{ prototyp wg http://msdn.microsoft.com/en-us/library/aa384714(VS.85).aspx
BOOL InternetGetCookieEx(
 __in         LPCTSTR pchURL,
 __in         LPCTSTR pchCookieName,
 __inout_opt  LPTSTR pchCookieData,
 __inout      LPDWORD pcchCookieData,
 __in         DWORD dwFlags,
 __in         LPVOID lpReserved
);
}

function InternetGetCookie(pchURL, pchCookieName,
   lpszCookieData: PChar; var pcchCookieData: DWORD; dwFlags:DWORD; 
   lpReserved:Pointer): BOOL; stdcall;

Implementation
function InternetGetCookieEx; external winetdll name 'InternetGetCookieEx';

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link to comment
Share on other sites

dzięki po zmianie na

KODfunction InternetGetCookieEx : BOOL; external 'winet.dll' name 'InternetGetCookieEx';

juz ją rozpoznaje ale nie wiem jak mam zaimportować flage INTERNET_COOKIE_HTTPONLY, co prawda to poprostu jakaś wartość DWORD ale w dokumentacji jej nie podali

Link to comment
Share on other sites

dzieki ale jednak nie działa (nie wiem czemu wcześniej kompilator tego nie zgłaszał dopóki nie skończyłem pisać wywołania funkcji w swoim programie...)

umieściłem w sekcji private deklaracje a import z dllki w implementation wcześniej nie zgłaszał problemu ale teraz pisze

KOD

[DCC Error] Unit1.pas(24): E2065 Unsatisfied forward or external declaration: 'TForm1.InternetGetCookieEx'

 

 

natomiast jak umieszczam poprostu w interface dokładnie po uses to otrzymuje taki o to komunikat z kompilatora

KOD[DCC Error] Unit1.pas(42): E2267 Previous declaration of 'InternetGetCookieEx' was not marked with the 'overload' directive

 

nie mam doświadczenia w importowaniu funkcji z dll w delphi bo zwykle w delphi większość z API była znana,

co robie źle?

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, WinInet, StdCtrls;

const
INTERNET_COOKIE_HTTPONLY = 8192;

function InternetGetCookieEx(pchURL, pchCookieName,
   lpszCookieData: PChar; var pcchCookieData: DWORD; dwFlags:DWORD;
   lpReserved:Pointer): BOOL; stdcall;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   function getHeader(hRequest: HINTERNET): String;
   function getCookie(hHttp: HINTERNET): String;
   function getCookieX(): String;
   function sslInet(Const AServer, AUrl, AData : AnsiString; blnSSL:Boolean = True): AnsiString;

 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

function InternetGetCookieEx : BOOL; external 'wininet.dll' name 'InternetGetCookieEx';
{$R *.dfm}

Link to comment
Share on other sites

w czesci implementation zmien na:

function InternetGetCookieEx; external 'wininet.dll' name 'InternetGetCookieEx';

 

bo kompilator sadzi ze cchesz overloadnac (zamiast zapowiedzi traktuje jako nowa deklaracje)

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link to comment
Share on other sites

teraz działa ciekawe ze na poczatku kompilator informował mnie ze w tej linijce funkcja powinna zwracać jakaś wartość dlatego zmieniałem ją własnie... ale nie ważne chyba nic wiecej się nie uda zrobić bo chodć program się kompiluje to nie może znaleźć EntryPoint

KODNie znaleziono punktu wejścia procedury InternetGetCookieEx w bibliotece wininet.dll

Link to comment
Share on other sites

dzięki rzeczywiście u mnie win7 nie ma podstawowej tylko jest ExA i ExW(ciekawe czemu)

teraz już działa ładnie zamieszczam kod bo cięzko znaleźć jakiś przykład tej funkcji pod Delphi

interface
 function InternetGetCookieExA(pchURL, pchCookieName, lpszCookieData: PChar;
   var pcchCookieData: DWORD; dwFlags: DWORD; lpReserved: Pointer): BOOL; stdcall;

implementation
 function InternetGetCookieExA; external 'wininet.dll' name 'InternetGetCookieExA';

function TForm1.GetHttpOnlyCookie(host, name: PChar): String;
const
 INTERNET_COOKIE_HTTPONLY = $00002000;

var
 pchURL, pchCookieName, lpszCookieData: PChar;
 pcchCookieData, dwBufLen: DWORD;

begin
 dwBufLen := 1024;
 GetMem(lpszCookieData, dwBufLen);
 InternetGetCookieExA(host, name, lpszCookieData, pcchCookieData,
                      INTERNET_COOKIE_HTTPONLY, 0);
 Result := StrPas(lpszCookieData);
 FreeMem(lpszCookieData, dwBufLen);
end;

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...