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
Benutzerbild von Zacherl
Zacherl

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

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 12:43
Zitat:
Habe leider auch nicht wirklich Ahnung, wie BSTR* definiert ist (die wäre wichtig),
Hat mich jetzt auch interessiert, was ich hier finde ist allerdings gruselig
Also BSTR ist WideString auf Delphi Seite.
Delphi-Quellcode:
function GetName(index: UINT): WideString; stdcall;
function Test(url: PWideChar; explicitly: BOOL; out canonical_url: WideString): HRESULT; stdcall;
Mhh, schwer zu sagen, was hier stimmt. Ich hatte ein paar Posts zuvor eine andere Definition gefunden. Das WideString kommt mir allerdings sehr komisch vor, da dies ein Delphi Typ mit Ref-Counter und allem drum und dran ist.

So oder so ist der Output Zeiger ja nil . Entsprechend der Dokumentation der Funktion ist das ja in Ordnung, falls S_FALSE zurückgeliefert wird. Jetzt kommt der Knackpunkt:
Zitat von MSDN:
The constants S_OK and S_FALSE are both success codes
Entsprechend liefert das SUCCEEDED() Makro jeweils true zurück. Hier müsstest du also nachher noch explizit auf S_OK oder S_FALSE testen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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, 13:11
http://docwiki.embarcadero.com/Libra...tem.WideString

Also wir benutzten dass hier häufig. (gemixte source VS C++ und Delphi)
Das schöne daran, Windows übernimmt die Speicherverwaltung.
Aber: Es ist nicht unbedingt das schnellste.
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 13:17
Dann hätten wir wohl auch hier jetzt die korrekte Übersetzung
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 14:28
Ok Danke euch..
function GetName(index: UINT): PWideChar; stdcall;

Hmm.. bin mir nicht sicher und zwar deshalb weil GetName mir die richtigen werte liefert
Dann gibt es noch den Unterschied BSTR und BSTR*


gruss

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

n/a Beiträge
 
#5

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 14: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 14:43 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 17: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 17:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 17:45
Wäre "GetLastError" ne Möglichkeit?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: C++ Delphi Übersetzung 3DYDYoutube Filter

  Alt 5. Okt 2018, 17: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
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 08:15 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