Zitat von
Robert Marquardt:
Das ist so beschissener Code das man ihn besser nicht nach Delphi uebersetzt.
Es fehlt auch zu viel Kontext als das man eine halbwegs sichere Uebersetzung wagen koennte.
Die C Funktion liefert die Adresse eines statischen Puffers, die einen C String enthaelt (PChar).
Dieser Pointer wird auch noch zu einem generischen LRESULT umgetypt. Boeser geht es fast nicht.
Trotzdem wird auch noch mit wp herumgespielt.
Der beste Weg ist direkt Playlist::GetFilename aufzurufen das ja den Puffer mit dem Filenamen fuellt.
Sorry hab für 1 Problem zwei Threads geöffnet.
Das oben gezeigte Schnipsel soll den String zurückgeben welcher mit dieser Funktion angefordert wurde.
Delphi-Quellcode:
function GetWinampFilename(data:Integer): String;
var hwndWinamp, TempHandle : THandle;
dat2: array[0..500] of Char;
TrackPos: Integer;
temp, MPointer: Cardinal;
begin
hwndWinamp:= FindWindow('Winamp v1.x',nil);
if hwndWinamp= 0 then
begin
result:=''
end else
begin
if data<0 then
TrackPos:= SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTPOS)
else
TrackPos:=data;
MPointer:= SendMessage(hwndWinamp,WM_USER,TrackPos , IPC_GETPLAYLISTFILE);
GetWindowThreadProcessId(hwndWinamp,TempHandle);
hwndWinamp:= OpenProcess(PROCESS_ALL_ACCESS,False,TempHandle);
ReadProcessMemory(hwndWinamp, Pointer(MPointer), @dat2,500,temp);
CloseHandle(hwndWinamp);
Result:= string(dat2);
end;
end;
Mit dem Übersetzen wollte ich dieses Problem lösen.
Plugin Problem
Leider werden mir hier nur 5 Buchstaben zurückgegeben.
gruß und Danke