AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Verwenden von IAMMediaContent
Thema durchsuchen
Ansicht
Themen-Optionen

Verwenden von IAMMediaContent

Ein Thema von EWeiss · begonnen am 5. Okt 2018 · letzter Beitrag vom 6. Okt 2018
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:21
Ahh dann war ich fast richtig. Siehe mein Edit.
Nun ja, fast richtig - es hatte sich bei dir eigentlich nichts gändert. Ob man den Pointer direkt an Title übergibt oder über eine Zwischenvariable, das ändert halt nichts.

Der FreeMem auf dem Pointer ist das Entscheidende
Also doch fast! Wollen wir mal nicht so kleinlich sein..

Auf jeden fall danke für den Hinweis.

gruss
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:29
Wenn du weiterhin Title als PWideChar übergeben willst, dann hast du jetzt zwei Möglichkeiten:

1. Du hast einen MemLeak, weil alle Stllen die diese Methode verwenden den Speicherbereich nicht freigeben.

2. Es knallt, wenn du den Speicher in der Methode schon freigibst.

Die beste Variante ist die von mir gezeigte function TEVMRPlayer.GetYoutubeFilterTitle(out Title: string): HRESULT; , denn dort hast du weder ein MemLeak noch einen SPeicherzugriffsfehler, egal was du anstellst. Ist allerdings auch nur eine Empfehlung wie ich das machen würde, weil es das Leben einfacher macht.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:30
Nun Praxis und versuch sind zwei Dinge.
Die Anwendung stürzt nun ab bei FreeMem.

gruss

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

n/a Beiträge
 
#4

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:37
Nun Praxis und versuch sind zwei Dinge.
Die Anwendung stürzt nun ab bei FreeMem.
Müsste ich mir dann einmal konkret ansehen ...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:40
Nun Praxis und versuch sind zwei Dinge.
Die Anwendung stürzt nun ab bei FreeMem.
Was ich dir einen Beitrag vorher #9 auch erläutert habe.
Hallo ?

Ich mache es genauso wie von dir gezeigt und verwende genau deine Funktion.
Deine Antwort..
Zitat:
So sollte das tun
Aber tut es nicht.

Schritt für Schritt also siehe..
Delphi-Quellcode:
var
  FileName: string;
//..
      if InStr(lowercase(FileName), '//') = 1 then
      begin
        hr := KVideo_GetYoutubeFilterTitle(FileName);
        if SUCCEEDED( hr)then
          SKAERO_SetCTLText(gP.MainHandle, FileName);
      end else
      SKAERO_SetCTLText(gP.MainHandle, FileName);
Delphi-Quellcode:
function KVideo_GetYoutubeFilterTitle(out Title: string): HRESULT; stdcall;
begin
  result := E_FAIL;

  if not Assigned(EVMRPlayer) then
    exit;

  result := EVMRPlayer.GetYoutubeFilterTitle(Title);
end;
Delphi-Quellcode:
function TEVMRPlayer.GetYoutubeFilterTitle(out Title: string): HRESULT;
var
  MediaContent: IAMMediaContent;
  pbstrTitle: PWideChar;
begin

  Result := E_FAIL;

  if not Assigned(srcFilter) then
    exit;

  if IsUrl then
  begin
    if DYDYoutubeFilter <> nil then
    begin
      srcFilter.QueryInterface(IID_IAMMediaContent, MediaContent);
      Result := MediaContent.get_Title(pbstrTitle);
      if not SUCCEEDED(Result) then
        ReportError('YoutubeFilterTitle fails', Result)
      else
      begin
        Title := pbstrTitle;
        FreeMem(pbstrTitle); // Crash!
      end;
    end;
  end;
end;
Also was denn nun?
Deine Methode oder nicht!
Dein FreeMem lässt die Anwendung auf jeden fall abstürzen genau das gleiche wenn ich pbstrTitle auf Nil setze.
Mit der Freigabe wird das wohl nix oder?

gruss

Geändert von EWeiss ( 6. Okt 2018 um 00:05 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: Verwenden von IAMMediaContent

  Alt 6. Okt 2018, 00:12
Ja, ich denke ich habe das Problem lokalisiert und kann dir morgen eine Lösung geben.

Ich vermute, dass die von dir verwendete Interface Deklaration von IAMMediaContent falsch ist. Aber dazu morgen mehr.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Verwenden von IAMMediaContent

  Alt 6. Okt 2018, 00:18
Ja, ich denke ich habe das Problem lokalisiert und kann dir morgen eine Lösung geben.

Ich vermute, dass die von dir verwendete Interface Deklaration von IAMMediaContent falsch ist. Aber dazu morgen mehr.
Verstehe jetzt zwar nicht warum denn es wird mir der korrekte Titel zurückgegeben und das ist was ich erwarte.
Aber Ok.. Danke.

gruss

Geändert von EWeiss ( 6. Okt 2018 um 00:23 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#8

AW: Verwenden von IAMMediaContent

  Alt 6. Okt 2018, 07:13
So, jetzt nochmals nachgelesen und wenn man ganz exakt der Dokumentation folgt, dann müsste es so sein (nicht getestet)
Delphi-Quellcode:
uses
  ...
  Winapi.ActiveX;

function TEVMRPlayer.GetYoutubeFilterTitle(out Title: string): HRESULT;
var
  MediaContent: IAMMediaContent;
  pbstrTitle: {Winapi.ActiveX.}TBSTR;
begin

  Result := E_FAIL;

  if not Assigned(srcFilter) then
    exit;

  if IsUrl then
  begin
    if DYDYoutubeFilter <> nil then
    begin
      srcFilter.QueryInterface(IID_IAMMediaContent, MediaContent);
      Result := MediaContent.get_Title(pbstrTitle);
      if not SUCCEEDED(Result) then
        ReportError('YoutubeFilterTitle fails', Result)
      else
        begin
          Title := OleStrToString(pbstrTitle);
          {Winapi.ActiveX.}SysFreeString(pbstrTitle);
        end;
    end;
  end;
end;

Geändert von Schokohase ( 6. Okt 2018 um 07:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Verwenden von IAMMediaContent

  Alt 6. Okt 2018, 07:26
Hui das Ding kannte ich auch noch nicht, SysFreeString, müßte das nicht noch in dem " if DYDYoutubeFilter <> nil then" block aufgerufen werden anstelle nur im "if not SUCCEEDED(Result) then" block?
Gruß vom KodeZwerg
  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 12:56 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