アプリケーションでDelphiEmbeddingChromium(CEF1)を使用していますが、URLのCookieデータを読み取るのに問題があります。
このコード(以下に含まれています)を見つけましたが、XE3では、この行について使用すると例外が発生します。
if WaitForSingleObject(vis.pEvent.Handle, INFINITE) = WAIT_OBJECT_0 then begin
例外は
プロジェクトguiclient.exeは、メッセージ「アドレス00000000でのアクセス違反」で例外クラスEAccessViolationを発生させました。アドレス00000000の読み取り
オブジェクトの1つが適切に作成または初期化されていないことを意味します。
私が使用しているコード(上記のフォーラムリンクからコピー)は次のとおりです。
TCustomVisitor = class (TCefCookieVisitorOwn)
private
fcookie: PCefCookie;
function visit(const name, value, domain, path: ustring; secure, httponly,
hasExpires: Boolean; const creation, lastAccess, expires: TDateTime;
count, total: Integer; out deleteCookie: Boolean): Boolean; override;
public
pEvent: TEvent;
function getCookies: PCefCookie;
constructor Create; override;
end;
constructor TCustomVisitor.Create;
begin
inherited;
pEvent := TEvent.Create(nil, False, False, 'ev.chromium');
new(fcookie);
end;
function TCustomVisitor.getCookies;
begin
Result := fcookie;
end;
function TCustomVisitor.visit(const name, value, domain, path: ustring; secure, httponly,
hasExpires: Boolean; const creation, lastAccess, expires: TDateTime;
count, total: Integer; out deleteCookie: Boolean): Boolean;
begin
fcookie.name := CefString(name);
fcookie.value := CefString(value);
fcookie.domain := CefString(domain);
fcookie.path := CefString(path);
fcookie.secure := secure;
fcookie.httponly := httponly;
fcookie.has_expires := hasExpires;
//fcookie.creation := DateTimeToCefTime(creation);
//fcookie.last_access := DateTimeToCefTime(lastAccess);
//fcookie.expires := DateTimeToCefTime(expires);
SetEvent(pEvent.Handle);
end;
procedure TfrmAuth.bt_okClick(Sender: TObject);
var
vis: TCustomVisitor;
cname, cvalue: uString;
ccookie: PCefCookie;
begin
if crm.Browser<>nil then begin
vis := TCustomVisitor.Create;
try
CefVisitUrlCookies(ed_url.Text, true, vis);
// !!! This line causes the access violation
if WaitForSingleObject(vis.pEvent.Handle, INFINITE) = WAIT_OBJECT_0 then begin
ccookie := vis.getCookies;
cname := CefString(@ccookie.name);
cvalue := CefString(@ccookie.value);
end;
finally
vis.Free;
end;
end;
end;