kage20 Posted May 1, 2010 Report Share Posted May 1, 2010 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 More sharing options...
Toster Posted May 1, 2010 Report Share Posted May 1, 2010 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 /> Link to comment Share on other sites More sharing options...
kage20 Posted May 1, 2010 Author Report Share Posted May 1, 2010 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 More sharing options...
Toster Posted May 1, 2010 Report Share Posted May 1, 2010 Public Const INTERNET_COOKIE_HTTPONLY As Integer = &H00002000 za: http://www.vbforums.com/showthread.php?t=596049 ewentualnie sciagnac naglowki .h dla c++ i znalezc Always Dark<br /> Link to comment Share on other sites More sharing options...
kage20 Posted May 1, 2010 Author Report Share Posted May 1, 2010 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 More sharing options...
Toster Posted May 1, 2010 Report Share Posted May 1, 2010 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 /> Link to comment Share on other sites More sharing options...
kage20 Posted May 1, 2010 Author Report Share Posted May 1, 2010 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 More sharing options...
Toster Posted May 1, 2010 Report Share Posted May 1, 2010 sproboj wziasc jakiegos viewera do dll'ek i zobaczyc jakie funkcje ona eksportuje. Moze masz niezgodna wersje Always Dark<br /> Link to comment Share on other sites More sharing options...
kage20 Posted May 1, 2010 Author Report Share Posted May 1, 2010 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.