AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C++ C++ Delphi Übersetzung 3DYDYoutube Filter
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Delphi Übersetzung 3DYDYoutube Filter

Ein Thema von EWeiss · begonnen am 2. Okt 2018 · letzter Beitrag vom 20. Nov 2020
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 18:17
Habe es jetzt mal so gemacht..

Delphi-Quellcode:
  if IsUrl then
  begin
    if DYDYoutubeFilter <> nil then
    begin
      hr := CoCreateInstance(CLSID_3DYDYoutubeSource, nil, CLSCTX_INPROC_SERVER, IID_IBaseFilter, Source);
      if SUCCEEDED(hr) then
      begin
        Source.QueryInterface(IID_ISupportedSites, SupportedSites);

// Version := SupportedSites.GetVersion;
        hr := SupportedSites.Test(PWideChar(MediaFile), false, url);
        if SUCCEEDED(hr) then
        begin
          if (hr = S_OK) then
          begin
            x := SupportedSites.GetCount;
            if x <> 0 then
            begin
              for IntI := 0 to x - 1 do
               Test := SupportedSites.GetName(IntI);
            end;
          end;
        end;
      end;
    end;
  end;
Aber sehe keinerlei unterschiede zwischen
hr := SupportedSites hr ist ja 0 also S_OK

eine nochmalige Abfrage von
if (hr = S_OK) then ist für mich unverständlich den ich weis doch das hr = 0 ist.

Mit der erneuten abfrage ist das ergebnis gleich URL ist LEER obwohl ich nochmals gegenprüfe und hr = 0 ist siehe Pic.
Hmmm... unverständlich

gruss

Geändert von EWeiss (11. Jul 2019 um 15:53 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 20:04
Das Problem hier ist das Delphi und C++ unterschiedlicher Meinung sind wie
Result Parameter übergeben werden.
Bin jetzt nicht an meinem Büro Rechner aber ich würde sagen wenn Du
zb.

function GetName(index: UINT): WideString; stdcall; mal abänderst zu
procedure GetName(index : UINT; out Result : WideString); stdcall; könnte es gehen.
Eventuell auch die Reihenfolge der Parameter tauschen

functionen in Interfaces die kein Result liefern sind sowieso.....

@Eweis: Du kannst es mir auch Mailen dann schaue ich drüber. (nicht vor Montag)
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 20:20
Nein das geht nicht.
Es muss
function GetName(index: UINT): PWideChar; stdcall;

sein.

Das funktioniert ja auch nur die Rückgabe der URL nicht.
Habe bald das Gefühl das in dem Filter einiges im argen ist.
Der Programmierer hat eine riesen Support Seite mit Formular usw.. wenn man aber was schreibt dann kommt nix.
Deshalb stehe ich auf den schlauch
Wenn ich das nicht klären kann werde ich den Support für den Filter einfach wieder entfernen.

Zitat:
functionen in Interfaces die kein Result liefern sind sowieso.....
Die hat doch eine Rückgabe
PWideChar!

Zitat:
@Eweis: Du kannst es mir auch Mailen dann schaue ich drüber. (nicht vor Montag)
Das wird schwierig mit den ganzen Filtern die da dran hängen um das korrekt prüfen zu können.

gruss

Geändert von EWeiss ( 5. Okt 2018 um 20:26 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 20:27
Nein das geht nicht.

Zitat:
functionen in Interfaces die kein Result liefern sind sowieso.....
Die hat doch eine Rückgabe
PWideChar!

gruss
Sollte nicht Result sondern HRESULT heißen. (Mein Fehler nicht geschaut vor dem abschicken )

Also in COM immer function(Parameter.. ; Out Result : type) : HRESULT;

das ist der von Microsoft eigentlich gewünschte Weg.
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 20:32
Nein es geht nicht. (auch mit HRESULT nicht) aber meine variante.

Ich verändere dadurch das Interface
Dort ist die Funktion so definiert.
Code:
STDMETHOD_(BSTR, GetName)(UINT index) = 0;
Ich kann diese nicht einfach ändern so wie ich will.
BSTR = PWideChar ist die Rückgabe.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.377 Beiträge
 
Delphi 12 Athens
 
#6

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 21:05
Bezüglich des ENUMs:

In Delphi sind die standardmäßig so klein wie möglich (hier also Byte), aber in C++ sind ENUMs/SETs oft immer INTEGER.

Also entweder den Typ als Integer/LongInt definieren und die Werte als Konstanten,
oder {$MINENUMSIZE 4} um diese Typ-Definition. (beim SET mit einem DummyWert =31)

Bei Enums mit Vorgaben (=irgendwas ) könnte man noch bedenken, dass dort leider keine TypeInfo für die Werte generiert werden.
Das könnte man mit Dummy-/Füllwerten für die Nichtdefinierten 0 bis 2 und ohne die Zuweisung =3 beheben, falls man Delphi-Referenz durchsuchenGetEnumName verwenden will/muss.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 21:21
Danke!

Hier nochmal der aktuelle Status habe Kommentiert was geht und was nicht.
Siehe '// ****'

Delphi-Quellcode:
{$REGION 'Interface DYDYoutubeFilter ISupportedSites'}
  ISupportedSites = interface(IUnknown)
    ['{FF762ACC-13EC-463A-A29C-FD4B0CD3E019}']
    // Version number equals to total number of functions within the interface
    // (ISupportedSites::kVersion is the current version). New functions are
    // appended to the interface. Function signatures are never change. Therefore
    // version number is the way to check whether particular function is available
    // in the interface
    function GetVersion: UINT; stdcall; // **** Funktioniert
    // Number of supported sites
    function GetCount: UINT; stdcall; // **** Funktioniert
    // Get site name or NULL if index >= GetCount()
    function GetName(index: UINT): PWideChar; stdcall; // **** Funktioniert
    // Test whether url can be analyzed for video retrieving. S_FALSE means that
    // url seems from the supported site but not a valid video clip page. When
    // S_OK is returned, canonical_url will contain canonical page url, otherwise
    // it will not be changed
    // If explicitly == TRUE then S_OK will be returned only if URL definitely
    // points to video page URL instead of maybe just to some other page from the
    // supported site. This can be determined only for few sites, for others need
    // page data to determine this
    function Test(url: PWideChar; explicitly: BOOL; var canonical_url: PWideChar): HRESULT; stdcall; // **** Funktioniert ABER URL ist Nil vielleicht muss das so sein
    // Returns clip start time encoded in URL, in milliseconds
    function GetStartTime(url: PWideChar): UINT; stdcall; // **** Funktioniert
  end;
{$ENDREGION}
Muss jetzt mal abwarten was da von dem noch kommt wenn nichts weiter stelle ich den Support ein.
Das ist zu stressig alles irgendwie zusammen zu klopfen ohne vernünftiges SDK.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz