AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probelm WideString nach PChar

Ein Thema von ichbin007 · begonnen am 27. Jan 2009 · letzter Beitrag vom 27. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
ichbin007

Registriert seit: 27. Jan 2009
11 Beiträge
 
#1

Probelm WideString nach PChar

  Alt 27. Jan 2009, 17:38
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:
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.
Mein Problem ist jetzt das Track.Name ein WideString ist aber ich das ganze in einem Pchar brauche !
Geht sowas ?

Danke im Vorraus

mfg

ichbin007

[edit=mkinzler]Für Delphicode ist der Delphi-Tag besser geeignet Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 17:45
Welche Delphi Version?

Result := PChar(Track.Name);
Markus Kinzler
  Mit Zitat antworten Zitat
ichbin007

Registriert seit: 27. Jan 2009
11 Beiträge
 
#3

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 17:47
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 17:55
Hier mal eine unsaubere Lösung:
Delphi-Quellcode:
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;
Unschön ist jetzt, dass ein globale Variable (*) benötigt wird, um den Speicherplatz für den String dauerhaft zu halten.
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;
Andreas
  Mit Zitat antworten Zitat
ichbin007

Registriert seit: 27. Jan 2009
11 Beiträge
 
#5

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 18:08
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 18:11
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
Markus Kinzler
  Mit Zitat antworten Zitat
ichbin007

Registriert seit: 27. Jan 2009
11 Beiträge
 
#7

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 18:35
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 18:45
Ich kenne die Struktur, die Hinter de Interface IITTrack steckt nicht, aber wenn es möglich ist sollte es darüber möglich sein.
Markus Kinzler
  Mit Zitat antworten Zitat
ichbin007

Registriert seit: 27. Jan 2009
11 Beiträge
 
#9

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 18:51
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
Angehängte Dateien
Dateityp: pas ituneslib_tlb_191.pas (110,5 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Probelm WideString nach PChar

  Alt 27. Jan 2009, 19:06
IITFileOrCDTrack ist ja von IITtack abgeleitet. Sollte mit eine Cast abfragbar sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz