Einzelnen Beitrag anzeigen

BobTheBuilder

Registriert seit: 10. Apr 2019
18 Beiträge
 
#1

Probleme mit Interfaces beim Nutzen von Edge/WebView als Ersatz für TWebBrowser

  Alt 15. Nov 2019, 15:30
Delphi-Version: 10.2 Tokyo
Hallo zusammen,

(Ich benutze Delphi 10.3, aber das kann man irgendwie nicht auswählen)

ich habe gemerkt, dass ich mich mit Interfaces überhaupt nicht auskenne und auf dem Schlauch stehe, um eine theoretisch sehr einfache Erweiterung an einem Beispiel vorzunehmen.

Beispiel kommt aus der Antwort von hier:
https://stackoverflow.com/questions/...lphi-c-builder

Einfach den Code in eine Form kopieren (und vielleicht den Form-Namen berichtigen) und schon hat man Edge als Steuerelement in einer Form laufen.

Ich benötige jetzt die Möglichkeit, das Steuerelement eine POST Anfrage machen zu lassen.

Da ich sowieso schon auf Stackoverflow das Beispiel gefunden hatte, habe ich mir gedacht, dass ich das auch direkt dort frage, auch wenn es leider bisher keine lösenden Antworten gegeben hat: https://stackoverflow.com/questions/...69770#58869770

Deswegen habe ich mir gedacht, dass ja eventuell hier jemand den Durchblick hat und mir helfen kann:

Ich will das IWebViewControl Interface um diese procedure erweitern:
Code:
procedure NavigateWithHttpRequestMessage(requestMessage: IHttpRequestMessage); stdcall;
Dazu brauche ich jedoch jetzt das IHttpRequestMessage Interface, das ich mir im Windows 10 Kit rausgesucht habe:
Code:
[exclusiveto(Windows.Web.Http.HttpRequestMessage)]
[uuid(F5762B3C-74D4-4811-B5DC-9F8B4E2F9ABF)]
interface IHttpRequestMessage : IInspectable
{
[propget] HRESULT Content([out] [retval] Windows.Web.Http.IHttpContent** value);
[propput] HRESULT Content([in] Windows.Web.Http.IHttpContent* value);
[propget] HRESULT Headers([out] [retval] Windows.Web.Http.Headers.HttpRequestHeaderCollection** value);
[propget] HRESULT Method([out] [retval] Windows.Web.Http.HttpMethod** value);
[propput] HRESULT Method([in] Windows.Web.Http.HttpMethod* value);
[propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.IMap<HSTRING, IInspectable*>** value);
[propget] HRESULT RequestUri([out] [retval] Windows.Foundation.Uri** value);
[propput] HRESULT RequestUri([in] Windows.Foundation.Uri* value);
[propget] HRESULT TransportInformation([out] [retval] Windows.Web.Http.HttpTransportInformation** value);
}
Wenn ich das richtig verstanden habe, ist das die (teilweise) Übersetzung:
Code:
IHttpRequestMessage = interface(IInspectable)
  ['{F5762B3C-74D4-4811-B5DC-9F8B4E2F9ABF}']
    procedure Placeholder_ContentGet; safecall;
    procedure Placeholder_ContentPut; safecall;
    procedure Placeholder_HeadersGet; safecall;
    procedure Placeholder_MethodGet; safecall;
    procedure Placeholder_MethodPut; safecall;
    procedure Placeholder_PropertiesGet; safecall;
    procedure Placeholder_RequestUriGet; safecall;
    procedure Placeholder_RequestUriPut; safecall;
    procedure Placeholder_TransportInformationGet; safecall;
  end;
Was ich nun garnicht verstehe: Wie erzeuge ich davon nun ein Objekt?

Ich habe schonmal in die TLBs von Activex DLLs reingeguckt und gesehen, dass die passenden Objekte per CreateComObject() erzeugt werden, aber wenn ich die GUID des Interfaces da rein gebe, dann sagt er mir, dass die Klasse nicht registriert wäre. Übersehe ich da etwas Offensichtliches oder bin ich vielleicht völlig auf dem Holzweg?

Vielleicht hat ja einer von euch etwas mehr Ahnung von Interfaces und kann mir zumindest die generelle Richtung weisen.
  Mit Zitat antworten Zitat