![]() |
Probelm WideString nach PChar
Hallo, ich bin neu hier und habe auch grade mit Delphi angefangen.
Ich versuche grade über das iTunes SDK den Namen des Gradegespielten Songs abzufragen, das geht auch soweit. Das ganze soll jetzt aber in eine DLL. Hier mal mein Code
Delphi-Quellcode:
Mein Problem ist jetzt das Track.Name ein WideString ist aber ich das ganze in einem Pchar brauche !
library dll;
uses SysUtils, iTunesLib_TLB, Classes; var Track: IITTrack; function Get_CurrentTrack():Pchar; stdcall; var iTunesApp: IiTunes; begin iTunesApp := COiTunesApp.Create; Track := iTunesApp.Get_CurrentTrack; iTunesApp := nil; Result := Track.Name; end; exports Get_CurrentTrack index 1; begin end. Geht sowas ? Danke im Vorraus mfg ichbin007 [edit=mkinzler]Für Delphicode ist der Delphi-Tag besser geeignet Mfg, mkinzler[/edit] |
Re: Probelm WideString nach PChar
Welche Delphi Version?
Delphi-Quellcode:
Result := PChar(Track.Name);
|
Re: Probelm WideString nach PChar
Jo das habe ich auch schon Versucht, wenn ich die DLL dann aber in dem anderen Programm verwende (ist kein Delphi Projekt) dann bekomme ich nur das erste Zeichen zurück.
mfg ichbin007 |
Re: Probelm WideString nach PChar
Hier mal eine unsaubere Lösung:
Delphi-Quellcode:
Unschön ist jetzt, dass ein globale Variable (*) benötigt wird, um den Speicherplatz für den String dauerhaft zu halten.
library dll;
uses SysUtils, iTunesLib_TLB, Classes; var Track: IITTrack; CurrentTrackName : AnsiString; // * function Get_CurrentTrack():Pchar; stdcall; var iTunesApp: IiTunes; begin iTunesApp := COiTunesApp.Create; Track := iTunesApp.Get_CurrentTrack; iTunesApp := nil; CurrentTrackName := Track.Name; // Delphi wandelt automatisch von Widestring nach AnsiString Result := PChar(CurrentTrackName); end; Angenommen, Get_CurrentTrack() wird zweimal nacheinander aufgerufen. Dann ist der 1. PChar nicht mehr gültig, weil die Variable CurrentTrackName einen neuen Inhalt hat. Wenn man's richtig machen möchte, dann muss der Aufrufer den Speicherplatz bereithalten:
Delphi-Quellcode:
function Get_CurrentTrack(trackname:PChar; size:integer):integer; stdcall;
var iTunesApp: IiTunes; tmp : string; begin iTunesApp := COiTunesApp.Create; Track := iTunesApp.Get_CurrentTrack; iTunesApp := nil; tmp := Track.Name; // Delphi wandelt automatisch von Widestring nach AnsiString result := Length(tmp) +1; // benötigter Speicherplatz zurückgeben if trackname <> nil then StrLCopy(trackname, PChar(tmp), size); // Daten kopieren end; |
Re: Probelm WideString nach PChar
Danke, shima !
Leider kann ich nicht bei jedem aufruf die Länge des ganzen Wissen daswegen ist die erste Methode wohl die die ich nehmen muss, auch wenn dabei Speicherrückstände im RAM bleiben. Würde es nicht Möglich sein eine Funktion zu schreiben welche die Variablen "Löscht" ? mfg ichbin007 |
Re: Probelm WideString nach PChar
Nein, weil der Speicherplatz ja beim Laden der Dll reserviert ist. Du müsstest den Speicherbereich vor de Zurückgeben dynmaicsh allokieren, dann könntest du eine Aufräumfunktion dafür anbieten. Da der Benutzer diese aber Aufrufen muss, kann er auch gleich den Speicher selber anfordern und an die Funktion übergeben
|
Re: Probelm WideString nach PChar
Ok das werde ich hinbekomme danke.
Ich habe noch eine Frage habe ich, ich möchte jetzt den Speicher-Ord des Gespielten Songs ermitteln, wie kann ich das am Besten machen. Danke im Vorraus mfg ichbin007 |
Re: Probelm WideString nach PChar
Ich kenne die Struktur, die Hinter de Interface IITTrack steckt nicht, aber wenn es möglich ist sollte es darüber möglich sein.
|
Re: Probelm WideString nach PChar
Liste der Anhänge anzeigen (Anzahl: 1)
Das Problem was ich habe ist das ich hier mit:
iTunesApp := COiTunesApp.Create; Nur ein IIITrack erstellen kann für den Pfad der datei brauch ich aber ein IITFileOrCDTrack nur weiß ich nicht wie ich das erstellen kann. Im Anhang ist die Struktur davon. Danke im Vorraus mfg ichbin007 |
Re: Probelm WideString nach PChar
IITFileOrCDTrack ist ja von IITtack abgeleitet. Sollte mit eine Cast abfragbar sein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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