Zitat von
HolgerCW:
weiss hier jemand, ob man Projekte aus Delphi 4 in Delphi 2006 ohne Einschränkungen weiterentwickeln kann?
Wir haben mit der Umstellung von Delphi 5 nach Delphi 7 deutlich mehr Probleme gehabt als bei Delphi 7 nach Delphi 2006.
Diese Probleme wirst Du dann warscheinlich auch haben.
Ichhabe mal eine Lister der häufigsten Probleme bei unserer Umstellung zusammengestellt:
Ich hoffe das hilft Dir weiter
mfg
MabuSE
- Bedingte Kompilierung
Du solltest Dir alle "bedingte Kompilierung"-Stellen anschauen.
Oft wird z.B. {$IFDEF VERXXX} verwendet um Quellcode führ mehrere Kompiler anzupassen.
Wenn nun ein "neuer" Kompiler dazukommt sollten diese Stellen angepasst werden.
Oft sind diese VERXXX auch in *.inc Dateien ausgelagert. Es werden dann eigene Symbole z.B. Delphi5Up definiert.
Also nach $IFDEF bzw. $IFNDEF suchen.- (unvollständige) Liste der Pascal (Delphi) Versionen:
VER60 = Turbo Pascal 6.0
VER70 = Borland Pascal 7.0
VER80 = Delphi 1.0
VER90 = Delphi 2.0
VER93 = C++ Builder 1.0
VER100 = Delphi 3.0
VER110 = C++ Builder 3.0
VER120 = Delphi 4.0
VER125 = C++ Builder 4.0
VER130 = Delphi 5.0 / C++ Builder 5.0
VER140 = Delphi 6.0 / C++ Builder 6.0
VER150 = Delphi 7.0 / C++ Builder 7.0
VER160 = Delphi 8.0
VER170 = Delphi 9.0 -> D2005
VER180 = Delphi 10.0 -> D2006
- zw. D5 und D6 haben sich einige Dinge bei der "Komponentenentwicklung" getan.
-> Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.dcu
- RtlConsts
Einige Konstanten sind in die Unit RtlConst verschoben worden.
Delphi-Quellcode:
uses
RtlConsts;
// constants that are now in RtlConsts:
// raise Exception.Create(ResStr(SLineTooLong));
// raise Exception.Create(ResStr(SFOpenError));
- Variants
Einige Funktionen sind in die Unit Variants verschoben worden.
Delphi-Quellcode:
uses
Variants;
// functions now in Variants;
// Result := not VarIsEmpty(FValue);
- StrUtils
Einige Funktionen sind in die Unit StrUtils verschoben worden.
- DateTimeUtils
Einige Funktionen sind in die Unit DateTimeUtils verschoben worden.
- PSock
Die Unit PSock enthält TPowersock, die Basisklasse der FastNet-Tools der Firma NetMasters. Die FastNet Tools werden bei Delphi 7 nicht mehr mitgeliefert und wurden schon in Delphi 6 durch die Indy Komponenten ersetzt.
Alle Komponenten die mit TNM... Anfangen und in Units NM* definiert sind sollten zu den FastNet Komponenten gehören.
In der Unit PSock sind neben dem Wrapper für den Winsock auch noch 3 String Funktionen definiert:Die Funktion NthPos wurde von mir nach Delphi 7 portiert, da sie in unseren Projekten verwendet wird.
Auszug aus der Delphi 5 Onlinehilfe
Funktion NthPos
function NthPos(InputString: String; Delimiter: Char; Number: integer): integer;
Beschreibung
Die Funktion NthPos gibt die Position des angegebenen Auftretens des festgelegten Begrenzungszeichens zurück.
Parameter:
InputString = Der Parameter InputString enthält den zu untersuchenden String
Delimiter = Der Parameter Delimiter gibt das Zeichen an, das als ein Trennzeichen zu verwenden ist
Number = Der Parameter Number gibt das Vorkommen des Begrenzungszeichens an, von dem die Position zurückzugeben werden soll.
Hinweis:
Die Verwendung dieser Funktion erfordert nicht, daß beliebige der FastNet-Komponenten in einer Anwendung verwendet werden. Die
Unit Psock muß jedoch in der Uses-Anweisung der
Unit stehen, in der die Funktion verwendet wird.
Portierung von NthPos auf Delphi 7:
Delphi-Quellcode:
unit PSock_D7;
// Diese Unit ersetzt die PSock.dcu aus Delphi 5,
// da diese in Delphi 7 nicht mehr mitgeliefert wird.
// 01.02.2005 jma, mbd: Erste Version in "\merian\Devisenhandel\Komponenten\Source\Sonstige\PSock_D7.pas"
interface
{
Deklaration
function NthPos(InputString: String; Delimiter: Char; Number: integer): integer;
Beschreibung
Die Funktion NthPos gibt die Position des angegebenen Auftretens des
festgelegten Begrenzungszeichens zurück.
Parameter:
InputString = Der Parameter InputString enthält den zu untersuchenden String
Delimiter = Der Parameter Delimiter gibt das Zeichen an, das als ein
Trennzeichen zu verwenden ist
Number = Der Parameter Number gibt das Vorkommen des Begrenzungszeichens
an, von dem die Position zurückzugeben werden soll.
Hinweis:
Test mit D5 ergab:
Number = 0 -> Result := 1
number > Anz. Delimiter in String -> Result := length(InputStr)+1
}
function NthPos(InputString: AnsiString; Delimiter: Char; Number: Integer): Integer;
implementation
uses StrUtils;
function NthPos(InputString: AnsiString; Delimiter: Char; Number: Integer): Integer;
var
i, j, k: Integer;
begin
i := 1;
j := 0;
k := 1;
while (j < Number)
and (i > 0)
do
begin
i := PosEx(Delimiter, InputString, k);
k := i + 1;
Inc(j);
end;
if i = 0
then
begin
if Number = 0
then
begin
Result := 1
end
else
begin
Result := Length(InputString)+1;
end;
end
else
begin
Result := i;
end;
end;
end.