Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Abstrakter Fehler ;-) (https://www.delphipraxis.net/101236-abstrakter-fehler-%3B.html)

hedie 10. Okt 2007 10:12


Abstrakter Fehler ;-)
 
Hallo

Ich habe folgenden code in einer DLL

Delphi-Quellcode:
function ID3(Filename:string;cnt:integer):string;stdcall;
var
stream:TFileStream;
sl:tstrings;
begin
ID3v2Tag := TID3v2Tag.Create;

stream := TFileStream.Create(filename, fmOpenRead or fmShareDenyWrite);

id3v2tag.ReadFromStream(stream);
if Not Id3v2Tag.exists then
  stream.Seek(0, sobeginning)
else
stream.Seek(Id3v2Tag.size, soFromBeginning);
stream.Free;
sl := tstrings.Create;
sl.Add(Id3v2Tag.Artist);
sl.Add(Id3v2Tag.Title);
sl.Add(Id3v2Tag.id3Length);
sl.Add(Id3v2Tag.MediaType);
result := sl.Strings[cnt];
{
titel := id3v2tag.Title;
length := id3v2tag.id3Length;
mt := id3v2tag.Mediatype;
}
end;
wenn ich nun diese Funktion so aufrufe

Delphi-Quellcode:
procedure TForm2.Listboxm1DblClick(Sender: TObject);
var i:integer;
begin
i := listboxm1.ItemIndex;
showmessage(ID3(listboxm2.Items.Strings[i],1));
end;
Kommt die Meldung: Abstrakter Fehler
Wenn ich den String ohne Stringlist übergebe gibts keine probleme

Bernhard Geyer 10. Okt 2007 10:13

Re: Abstrakter Fehler ;-)
 
Mann sollte Compiler-Warnungen/Fehler nicht ignorieren:
Delphi-Quellcode:
sl := tstrings.Create;

->

sl := tstringlist.Create;

Luckie 10. Okt 2007 10:20

Re: Abstrakter Fehler ;-)
 
TStrings ist eine abstrakte Klasse, deren Methoden von den abgeleiteten Klassen erst implementiert werden müssen.

hedie 10. Okt 2007 10:23

Re: Abstrakter Fehler ;-)
 
Hmmm es kommt zwar kein fehler mehr jedoch wird auch nix übertragen

sirius 10. Okt 2007 10:27

Re: Abstrakter Fehler ;-)
 
Wie hast denn du ID3 in der exe deklariert?

hedie 10. Okt 2007 10:54

Re: Abstrakter Fehler ;-)
 
Delphi-Quellcode:
function ID3(Filename:string;cnt:integer):string;stdcall;
external 'dll.dll';

augerufen wird sie so

Delphi-Quellcode:
showmessage(ID3(listboxm2.Items.Strings[i],0));

Luckie 10. Okt 2007 10:56

Re: Abstrakter Fehler ;-)
 
Rückgabe von Strings aus DLLs

sirius 10. Okt 2007 10:56

Re: Abstrakter Fehler ;-)
 
Und benutzt du die Unit sharemem? (Wobei ich mir nicht sicher bin, ob das die Ursache ist)

Edit:
Zitat:

Zitat von Luckie

Aber wenn man in Delphi bleibt, kann man erstmal shortstring nehmen, oder?

hedie 10. Okt 2007 10:57

Re: Abstrakter Fehler ;-)
 
Nein benutze ich nicht

sirius 10. Okt 2007 11:00

Re: Abstrakter Fehler ;-)
 
Zitat:

Zitat von hedie
Nein benutze ich nicht

Dann ersetze mal in allen Parametern der Funktion ID3 "string" durch "shortstring" (In der Hoffnung, dass keiner länger als 255 Zeichen ist), in EXE und DLL.

Für den Fortgeschrittenen Kurs empfehle ich dann Luckies Link zu Luckies Tutorial. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.
Seite 1 von 2  1 2      

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