Einzelnen Beitrag anzeigen

Maekkelrajter
Online

Registriert seit: 8. Mär 2017
Ort: Köln
156 Beiträge
 
Delphi 12 Athens
 
#1

Leerstring bei Interface

  Alt 28. Mai 2024, 13:37
In einem Projekt mache ich ausgiebig Gebrauch von dem Itunes COM Interface, um von meinem Programm aus die Itunes-Software 'fernsteuern' zu können. Das funktioniert i. d. R. problemlos. Laut der 'iTunes COM Interface Documentation' sind Strings als 'BSTR' deklariert, die ja mit dem 'Widestring' von Delphi kompatibel sind. Das Auslesen dieser Strings ist kein Problem, eine Zuweisung zu einem solchen String normalerweise auch nicht. Nur wenn ich einen solchen String 'löschen' will, indem ich einen Leerstring zuweise, gibt es eine Delphi-Exception 'EOleException Ungültiger Zeiger'.
In der Typelibrary 'iTunesLib_TLB' ist z. B. der String 'EpisodeID' folgendermaßen deklariert:
Delphi-Quellcode:
// *********************************************************************//
// Interface: IITFileOrCDTrack
// Flags: (4432) Hidden Dual OleAutomation Dispatchable
// GUID: {00D7FE99-7868-4CC7-AD9E-ACFD70D09566}
// *********************************************************************//
  IITFileOrCDTrack = interface(IITTrack)
    ['{00D7FE99-7868-4CC7-AD9E-ACFD70D09566}']
[...]
    function Get_EpisodeID: WideString; safecall;
    procedure Set_EpisodeID(const EpisodeID: WideString); safecall;
[...]
    property EpisodeID: WideString read Get_EpisodeID write Set_EpisodeID;
[...]
  end;
Bisher habe ich mich damit beholfen, dass ich anstatt eines Leerstrings (EpisodeID := '') einen Nullwert übergebe (EpisodeID := #0).
Dadurch verschwindet der Eintrag zwar in der Listenansicht, aber in der Itunes - Datenbank bzw. der daraus generierten XML-Datei steht nach wie vor ein 'leerer' String mit der Länge 1: <key>EpisodeID</key><string> </string>.
Mit einem VB-Script funktioniert die Zuweisung eines Leerstrings (track.EpisodeID="") dagegen erwartungsgemäß: Der Eintrag wird komplett entfernt.
Ich habe leider wenig Erfahrung mit Interfaces unter Delphi. Ist es generell unzulässig, einen Leerstring zuzuweisen, oder geht das irgendwie ganz anders? Oder handelt es sich um einen Fehler der Type-Libraray?
Als Workaround könnte ich aus meinem Programm ein VB-Script starten, aber das wäre wirklich nur eine Notlösung.
Es wäre schön, wenn mir da jemand weiterhelfen könnte.

Gruß LP
  Mit Zitat antworten Zitat