Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ C++ Delphi Übersetzung 3DYDYoutube Filter (https://www.delphipraxis.net/198084-c-delphi-uebersetzung-3dydyoutube-filter.html)

EWeiss 5. Okt 2018 14:39

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
Zitat:

Dann hätten wir wohl auch hier jetzt die korrekte Übersetzung
Nein ist definitiv PWideChar!

Getestet.

Falsch! liefert leer String zurück.
Delphi-Quellcode:
function GetName(index: UINT): WideString; stdcall;

Richtig!
Delphi-Quellcode:
function GetName(index: UINT): PWideChar; stdcall;


PWideString liefert falsche Werte.


gruss

EWeiss 5. Okt 2018 17:35

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
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.
Delphi-Quellcode:
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

KodeZwerg 5. Okt 2018 17:45

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
Wäre "GetLastError" ne Möglichkeit?

EWeiss 5. Okt 2018 17:47

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
Zitat:

Zitat von KodeZwerg (Beitrag 1415042)
Wäre "GetLastError" ne Möglichkeit?

Nein.

gruss

Zacherl 5. Okt 2018 17:53

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
Zitat:

Zitat von EWeiss (Beitrag 1415041)
Das tue ich doch.
Delphi-Quellcode:
hr := SupportedSites.Test(PWideChar(MediaFile), false, url);

Nee, du prüfst aber doch das
Delphi-Quellcode:
hr
dann mit dem
Delphi-Quellcode:
SUCCEEDED()
Makro. Das Problem ist, dass sowohl
Delphi-Quellcode:
S_OK
, als auch
Delphi-Quellcode:
S_FALSE
keinen Fehler indizieren, weshalb du immer
Delphi-Quellcode:
true
erhälst. Du musst nach dem
Delphi-Quellcode:
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;

Zitat:

Zitat von EWeiss (Beitrag 1415041)
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
Delphi-Quellcode:
STDMETHOD
definiert ist als
Delphi-Quellcode:
#define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method
, also als Funktion mit
Delphi-Quellcode:
HRESULT
als Rückgabewert (nicht zu verwechseln mit
Delphi-Quellcode:
STDMETHOD_
).

EWeiss 5. Okt 2018 17:58

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
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
Delphi-Quellcode:
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

EWeiss 5. Okt 2018 18:17

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
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
Delphi-Quellcode:
hr := SupportedSites
hr ist ja 0 also S_OK

eine nochmalige Abfrage von
Delphi-Quellcode:
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

Fritzew 5. Okt 2018 20:04

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
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.

Delphi-Quellcode:
function GetName(index: UINT): WideString; stdcall;
mal abänderst zu
Delphi-Quellcode:
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)

EWeiss 5. Okt 2018 20:20

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
Nein das geht nicht.
Es muss
Delphi-Quellcode:
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

Fritzew 5. Okt 2018 20:27

AW: C++ Delphi Übersetzung 3DYDYoutube Filter
 
Zitat:

Zitat von EWeiss (Beitrag 1415054)
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 :oops:)

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

das ist der von Microsoft eigentlich gewünschte Weg.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 Uhr.
Seite 4 von 5   « Erste     234 5      

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