Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Delphi Unit Lazarus lauffähig machen (https://www.delphipraxis.net/144937-delphi-unit-lazarus-lauffaehig-machen.html)

Luckie 20. Dez 2009 06:46


Delphi Unit Lazarus lauffähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich versuche gerade die Unit im Anhang für Lazarus lauffähig zu bekommen. Scheitere aber noch an folgen den fehlern:
Zitat:

units\MpuTools.pas(701,24) Hint: Local variable "Msg" does not seem to be initialized
units\MpuTools.pas(772,30) Hint: Local variable "ft" does not seem to be initialized
units\MpuTools.pas(874,25) Error: Incompatible type for arg no. 1: Got "OPENFILENAME", expected "LPOPENFILENAME"
units\MpuTools.pas(901,25) Error: Incompatible type for arg no. 1: Got "OPENFILENAME", expected "LPOPENFILENAME"
units\MpuTools.pas(925,23) Error: Illegal type conversion: "ShortString" to "^Char"
units\MpuTools.pas(929,41) Error: Incompatible type for arg no. 1: Got "BROWSEINFO", expected "LPBROWSEINFO"
units\MpuTools.pas(983,16) Hint: Local variable "bi" does not seem to be initialized
units\MpuTools.pas(988,25) Warning: Local variable "ca" does not seem to be initialized
units\MpuTools.pas(989,20) Error: Illegal type conversion: "ShortString" to "^Char"
units\MpuTools.pas(992,41) Error: Incompatible type for arg no. 1: Got "BROWSEINFO", expected "LPBROWSEINFO"
units\MpuTools.pas(1030,16) Hint: Local variable "bi" does not seem to be initialized
units\MpuTools.pas(1039,41) Error: Incompatible type for arg no. 1: Got "BROWSEINFO", expected "LPBROWSEINFO"
units\MpuTools.pas(1209,50) Error: Call by var for arg no. 2 has to match exactly: Got "WIN32_FIND_DATAW" expected "WIN32_FIND_DATA"
units\MpuTools.pas(1212,14) Warning: Local variable "wfd" does not seem to be initialized
units\MpuTools.pas(1212,75) Hint: Converting the operands to "Int64" before doing the add could prevent overflow errors.
units\MpuTools.pas(1222,32) Error: Illegal type conversion: "ShortString" to "^Char"
units\MpuTools.pas(1242,32) Error: Illegal type conversion: "ShortString" to "^Char"
units\MpuTools.pas(1261,66) Hint: Function result variable does not seem to be initialized
units\MpuTools.pas(1271,67) Hint: Function result variable does not seem to be initialized
units\MpuTools.pas(1305,22) Hint: Local variable "SizeWritten" does not seem to be initialized
units\MpuTools.pas(1320,41) Error: Identifier not found "TNonClientMetricsW"
units\MpuTools.pas(1320,41) Error: Error in type definition
units\MpuTools.pas(1322,13) Error: Illegal qualifier
units\MpuTools.pas(1322,48) Error: Identifier not found "TNonClientMetricsW"
units\MpuTools.pas(1323,74) Error: Identifier not found "TNonClientMetricsW"
units\MpuTools.pas(1366,28) Error: Illegal type conversion: "ShortString" to "^Char"
units\MpuTools.pas(1373,16) Hint: Local variable "BytesRead" does not seem to be initialized
units\MpuTools.pas(1372,47) Hint: Local variable "ImageDosHeader" does not seem to be initialized
units\MpuTools.pas(1384,48) Hint: Local variable "ImageNtHeaders" does not seem to be initialized
units\MpuTools.pas(1419,73) Warning: Mixing signed expressions and longwords gives a 64bit result
units\MpuTools.pas(1419,73) Hint: Converting the operands to "Int64" before doing the multiply could prevent overflow errors.
units\MpuTools.pas(1433,42) Error: Expression type must be class or record type
units\MpuTools.pas(1434,34) Error: Identifier not found "VirtualAddress"
units\MpuTools.pas(1435,33) Error: Identifier not found "VirtualAddress"
units\MpuTools.pas(1435,49) Error: Identifier not found "SizeOfRawData"
units\MpuTools.pas(1437,47) Error: Identifier not found "PointerToRawData"
units\MpuTools.pas(1437,65) Error: Identifier not found "VirtualAddress"
units\MpuTools.pas(1451,51) Hint: Local variable "ResDirTable" does not seem to be initialized
units\MpuTools.pas(1459,56) Hint: Local variable "FileTime" does not seem to be initialized
units\MpuTools.pas(1533,47) Hint: Local variable "Rect" does not seem to be initialized
units\MpuTools.pas(1536,8) Error: Illegal qualifier
units\MpuTools.pas(1536,8) Hint: may be pointer dereference is missing
units\MpuTools.pas(1536,8) Error: Illegal expression
units\MpuTools.pas(1536,8) Fatal: Syntax error, ";" expected but "identifier HWND" found
Wenn mir da jemand helfen könnte. Und es sollte wenn möglich alles Unicode sein.

Klasse wäre natürlich auch, wenn man sie auch unter Delphi zum Laufen bekäme.

Alter Mann 20. Dez 2009 16:55

Re: Delphi Unit Lazarus lauffähig machen
 
Hi Lukie,

so wie es aussieht, funktioniert die Sache einwenig anders als unter Delphi.

In OpenFile und SaveFileAs muss der Aufruf in der Art:
Delphi-Quellcode:
  if GetOpenFileName(@ofn) then
    result := ofn.lpstrFile;
Zu mindestens mault der Compiler nicht mehr, ob das Ergebnis stimmt ist erst zu sehen wenn die Unit 'durchgeht'.
Es wird wohl noch ein wenig dauern...

Viele Grüße

Alter Mann

JamesTKirk 20. Dez 2009 17:11

Re: Delphi Unit Lazarus lauffähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du solltest eventuell auch folgendes vor dem {$asmmode} einfügen:

Delphi-Quellcode:
{$ifdef fpc}
  {$mode delphi}{$H+}
{$endif}
Das könnte zumindest ein paar der Fehler beseitigen.

Nichtsdestotrotz hast du dir da zu Beginn einen ziemlich harten Brocken ausgesucht :mrgreen:

EDIT:
Mir fällt grad auf, dass da einige Interface Funktionen nicht mit deren Implementierung übereinstimmen:

z. B. Interface:
Delphi-Quellcode:
function Ansi2OEM(AnsiString: string): string;
Implementierung:
Delphi-Quellcode:
function Ansi2OEM(AnsiString: WideString): WideString;
Delphi ist hier seeeeeehhhhhrrrrr tolerant. FPC ist hier strikter, was ich allerdings auch gut finde!

EDIT2:
Ok... kompiliert nun. Veränderte Unit im Anhang. Einige (Hilfs)Funktionen kann man für FPC denke ich noch ifdefen.

Gruß,
Sven

Luckie 20. Dez 2009 21:31

Re: Delphi Unit Lazarus lauffähig machen
 
Zitat:

Zitat von JamesTKirk
EDIT:
Mir fällt grad auf, dass da einige Interface Funktionen nicht mit deren Implementierung übereinstimmen:

z. B. Interface:
Delphi-Quellcode:
function Ansi2OEM(AnsiString: string): string;
Implementierung:
Delphi-Quellcode:
function Ansi2OEM(AnsiString: WideString): WideString;

Ja, ich war gerade dabei alles auf WideStriung umzustellen.

Vielen Dank schon mal für deine Arbeit, werde ich mir mal angucken.

Astat 20. Dez 2009 21:42

Re: Delphi Unit Lazarus lauffähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Luckie.

Beigefügt, Compiliert das Ding mal unter FPC.

lg. Astat

Luckie 20. Dez 2009 21:53

Re: Delphi Unit Lazarus lauffähig machen
 
Jetzt prügelt ihr euch aber drum, was? ;)

Werde ich mir natürlich auch angucken. Was hast du konkret gemacht? Und welche Unit hast du als Grundlage benutzt? Meine oder die von Kirk?

Astat 20. Dez 2009 22:34

Re: Delphi Unit Lazarus lauffähig machen
 
Zitat:

Zitat von Luckie
Jetzt prügelt ihr euch aber drum, was?

Naja, ist ja nicht irgendjemand der da was braucht!!!!!

Hab die Kirk geänderte mpu verwendet, danach einfach wild alles gecastet, und Compiler Warnings mal ignoriert.
Sollte man unter Lazarus zwar ernster nehmen als unter Delphi, aber schlampig wie ich bin "g".

lg. Astat


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