AGB  ·  Datenschutz  ·  Impressum  







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

C++ Delphi Übersetzung 3DYDYoutube Filter

Ein Thema von EWeiss · begonnen am 2. Okt 2018 · letzter Beitrag vom 20. Nov 2020
Antwort Antwort
Seite 4 von 5   « Erste     234 5   
EWeiss
(Gast)

n/a Beiträge
 
#31

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 15:39
Zitat:
Dann hätten wir wohl auch hier jetzt die korrekte Übersetzung
Nein ist definitiv PWideChar!

Getestet.

Falsch! liefert leer String zurück.
function GetName(index: UINT): WideString; stdcall;
Richtig!
function GetName(index: UINT): PWideChar; stdcall;

PWideString liefert falsche Werte.


gruss

Geändert von EWeiss ( 5. Okt 2018 um 15:43 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#32

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 18:35
Zitat:
Entsprechend liefert das SUCCEEDED() Makro jeweils true zurück. Hier müsstest du also nachher noch explizit auf S_OK oder S_FALSE testen.
Ich weis jetzt nicht wie du das meinst.

Das tue ich doch.
hr := SupportedSites.Test(PWideChar(MediaFile), false, url);

Die frage die da noch wäre ist das nun eine Procedure oder eine Funktion!
Code:
STDMETHOD(Test)(__in LPCWSTR url, __in BOOL explicitly, __out_opt BSTR* canonical_url) = 0;
Sieht mir nach procedure aus, wenn dem so ist wie soll ich dann auf S_OK\S_FALSE testen?
Ich habe es als Function ausgelegt da ich nicht weis wie ich sonst auf S_OK hin testen soll.

gruss

Geändert von EWeiss ( 5. Okt 2018 um 18:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
2.637 Beiträge
 
Delphi 10.3 Rio
 
#33

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 18:45
Wäre "GetLastError" ne Möglichkeit?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#34

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 18:47
Wäre "GetLastError" ne Möglichkeit?
Nein.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#35

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 18:53
Das tue ich doch.
hr := SupportedSites.Test(PWideChar(MediaFile), false, url);
Nee, du prüfst aber doch das hr dann mit dem SUCCEEDED() Makro. Das Problem ist, dass sowohl S_OK , als auch S_FALSE keinen Fehler indizieren, weshalb du immer true erhälst. Du musst nach dem SUCCEEDED() Check nochmal genau prüfen, also:
Delphi-Quellcode:
if SUCCEEDED(hr) then
begin
  if (hr = S_OK) then
    // String sollte etwas beinhalten
  else if (hr = S_FALSE) then
    // String sollte nil sein
  else
    // nicht dokumentiert
end;

Die frage die da noch wäre ist das nun eine Procedure oder eine Funktion!
Code:
STDMETHOD(Test)(__in LPCWSTR url, __in BOOL explicitly, __out_opt BSTR* canonical_url) = 0;
...
Ich habe es als Function ausgelegt da ich nicht weis wie ich sonst auf S_OK hin testen soll.
Das ist auch korrekt so, da STDMETHOD definiert ist als #define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method , also als Funktion mit HRESULT als Rückgabewert (nicht zu verwechseln mit STDMETHOD_ ).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#36

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 18:58
Zitat:
Das ist auch korrekt so
Ahh wuste ich jetzt nicht dann ist es doch eine Function.. Danke schön.

Werde das mal mit SUCCEEDED ausprobieren (nicht essen nur testen )
Die frage ist nur was mache ich mit
if (hr = S_OK) then

Denn wenn die URL <> NIL dann weis ich es nach dem Aufruf der Funktion was nutzt mir eine nochmalige gegen Prüfung?
Also was soll ich da reinpacken // String sollte etwas beinhalten

gruss

Geändert von EWeiss ( 5. Okt 2018 um 19:05 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#37

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 19: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 16:53 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
648 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#38

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 21: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
 
#39

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 21: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 21:26 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
648 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#40

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 21: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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf