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