Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Übersetzen C nach Delphi (https://www.delphipraxis.net/73583-uebersetzen-c-nach-delphi.html)

BassFan 20. Jul 2006 03:38


Übersetzen C nach Delphi
 
Wer könnte das kleine Schnipsel übersetzen?

Code:
         {
            static char szAnsiFilename[ 2000 ] = "\0";
            Playlist::GetFilename( ( int )wp, szAnsiFilename, 1999 );
            return ( LRESULT )szAnsiFilename;
         }
gruß

Robert Marquardt 20. Jul 2006 05:30

Re: Übersetzen C nach Delphi
 
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.

BassFan 20. Jul 2006 13:46

Re: Übersetzen C nach Delphi
 
Zitat:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 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