CG2009 mitgeliefertes Indy Paket neukompilieren
-
Hallo zusammen
Weiß nicht so richtig wie ich den Titel wählen soll ;-((
Also, bin von BCB6 auf CG2009 (nur C++Builder) umgestiegen.
Muß nun eine bestehende Dll von BCB6 zu CG2009 portieren. Diese Dll verwendet den Indy (mitgeliefert mit CG2009) TFTP Client (IdTrivialFTP). Dieser Client wirft allerdings bei der Put Methode eine OutOfRange Exception.
Nach etwas Googlen habe ich eine Lösung für das Problem gegfunden. In der entsprechenden Pas-Datei muß etwas geändert werden und anschließend muß Indy neu kompliliert werden.Und genau hier habe ich mein Problem.
Wenn ich dies richtig verstanden habe muß das Protokoll dpk von Indy neu kompiliert werden, allerdings da ich kein Delphi habe läßt sich das dpk nicht in der IDE öffnen. Es gibt angeblich noch die Möglichkeit es über die Cmd (dcc32.exe) zu machen jedoch hier fehlt mir etwas der Durchblick.
Hat dies schon mal jemand gemacht?
Hab von Delphi leider gar keine Ahnung.Vielen Dank im voraus.
MfG Stephan
-
Die mitgelieferte Version von Indy ist etwas fehlerdurchsetzt; du solltest eine aktuelle Version von den Daily Snapshots herunterladen. Wenn du es dir besonders einfach machen willst, kannst du die gezippte Version herunterladen (IndyTiburon.zip). Beim heutigen Snapshot sind ein paar Bugs in IdIOHandler.pas, die ich folgendermaßen korrigiert habe:
--- E:/Programme/Tiburon/source/Indy/Snapshot/Lib/Core/IdIOHandler_orig.pas Fri Jul 17 09:39:42 2009 +++ E:/Programme/Tiburon/source/Indy/Snapshot/Lib/Core/IdIOHandler.pas Sun Jul 19 23:08:24 2009 @@ -2035,7 +2035,7 @@ LStrings.Add(s); end else if LStream <> nil then begin - WriteStringToStream(LStream, s+EOL, ADestEncoding + WriteStringToStream(LStream, s+EOL, AByteEncoding {$IFDEF STRING_IS_ANSI}, ADestEncoding{$ENDIF} ); end; @@ -2247,13 +2247,13 @@ end; procedure TIdIOHandler.InputBufferToStream(AStream: TStream; AByteCount: Integer = -1); -{$IFDEF USE_INLINE}inline;{$ENDIF} +{$IFDEF USE_CLASSINLINE}inline;{$ENDIF} begin FInputBuffer.ExtractToStream(AStream, AByteCount); end; function TIdIOHandler.InputBufferIsEmpty: Boolean; -{$IFDEF USE_INLINE}inline;{$ENDIF} +{$IFDEF USE_CLASSINLINE}inline;{$ENDIF} begin Result := FInputBuffer.Size = 0; end; @@ -2322,13 +2322,13 @@ end; function TIdIOHandler.WriteBufferingActive: Boolean; -{$IFDEF USE_INLINE}inline;{$ENDIF} +{$IFDEF USE_CLASSINLINE}inline;{$ENDIF} begin Result := FWriteBuffer <> nil; end; procedure TIdIOHandler.CloseGracefully; -{$IFDEF USE_INLINE}inline;{$ENDIF} +{$IFDEF USE_CLASSINLINE}inline;{$ENDIF} begin FClosedGracefully := True end;
Auch die Datei FullD12.bat mußte ich ein wenig anpassen:
--- E:/Programme/Tiburon/source/Indy/Snapshot/Lib/FullD12.bat Fri May 16 08:45:28 2008 +++ E:/Programme/Tiburon/source/Indy/Snapshot/Lib/FullD12m.bat Sun Jul 19 22:56:10 2009 @@ -19,7 +19,8 @@ set BUILDROOT=%CD% pushd lib REM SET NDD12=C:\Builds\TP -SET NDD12=D:\work\tp.3p +SET NDD12=E:\Programme\Tiburon +SET BNDD12=%BUILDROOT%\D120 SET NDWINSYS=%BUILDROOT%\system32 set D12DCC=%NDD12%\bin\dcc32.exe set BINOUTDIR=%BUILDROOT%\D120\bin @@ -27,10 +28,10 @@ set DCPOUTDIR=%BUILDROOT%\D120\intermediate\release\dcp set LIBOUTDIR=%BUILDROOT%\D120\lib\release set HPPOUTDIR=%BUILDROOT%\D120\include\vcl -set DCCSWTS=-B -N0%DCUOUTDIR% -NH%HPPOUTDIR% -NO%LIBOUTDIR% -NB%LIBOUTDIR% -U%NDD12%\intermediate\release\lib -Ic%NDD12%\intermediate\release\lib -LN%NDD12%\intermediate\release\dcp +set DCCSWTS=-B -N0%DCUOUTDIR% -NH%HPPOUTDIR% -NO%LIBOUTDIR% -NB%LIBOUTDIR% -U%BNDD12%\intermediate\release\lib -Ic%BNDD12%\intermediate\release\lib -LN%BNDD12%\intermediate\release\dcp set BCBSWTS=-JPHNE -JL -REM set DCCDWTS=-I%NDD12%\intermediate\release\lib -U%NDD12%\intermediate\release\dcp -LU%NDD12%\intermediate\release\dcp -REM SET DCCSWTS=-U%NDD12%\intermediate\release\lib -I%NDD12%\intermediate\release\lib -LN%NDD12%\intermediate\release\dcp +REM set DCCDWTS=-I%BNDD12%\intermediate\release\lib -U%BNDD12%\intermediate\release\dcp -LU%BNDD12%\intermediate\release\dcp +REM SET DCCSWTS=-U%BNDD12%\intermediate\release\lib -I%BNDD12%\intermediate\release\lib -LN%BNDD12%\intermediate\release\dcp if exist setenv.bat call setenv.bat if not exist %BINOUTDIR% md %BINOUTDIR% >nul if not exist %DCUOUTDIR% md %DCUOUTDIR% >nul @@ -48,7 +49,7 @@ %NDD12%\Tools\brcc32.exe IndySystem120.rc echo ready to compile System %D12DCC% IndySystem120.dpk /Oobjs /m /h /w /N%BUILDROOT%\D120 -$d-l-n+p+r-s-t-w- %DCCSWTS% %BCBSWTS% %2 %3 %4 -REM %D12DCC% -B IndySystem120.dpk /Oobjs /m /h /w /N..\..\D120 -$d-l-n+p+r-s-t-w- -U%NDD12%\intermediate\release\lib -I%NDD12%\intermediate\release\lib -LN%NDD12%\intermediate\release\dcp +REM %D12DCC% -B IndySystem120.dpk /Oobjs /m /h /w /N..\..\D120 -$d-l-n+p+r-s-t-w- -U%BNDD12%\intermediate\release\lib -I%BNDD12%\intermediate\release\lib -LN%BNDD12%\intermediate\release\dcp if errorlevel 1 goto enderror REM copy *120.bpl ..\..\D120 >nul REM copy *120.dcp ..\..\D120 >nul @@ -61,8 +62,8 @@ ECHO ************** CD Core call %BUILDROOT%\clean.bat -%NDD12%\Tools\brcc32.exe IndyCore120.rc -%NDD12%\Tools\brcc32.exe dclIndyCore120.rc +%BNDD12%\Tools\brcc32.exe IndyCore120.rc +%BNDD12%\Tools\brcc32.exe dclIndyCore120.rc %D12DCC% IndyCore120.dpk /Oobjs /m /h /w /N%BUILDROOT%\D120 /U%DCUOUTDIR% -$d-l-n+p+r-s-t-w- %DCCSWTS% %BCBSWTS% %2 %3 %4 if errorlevel 1 goto enderror %D12DCC% dclIndyCore120.dpk /Oobjs /m /h /w /z /N%BUILDROOT%\D120 /U%DCUOUTDIR% -$d-l-n+p+r-s-t-w- %DCCSWTS% %BCBSWTS% %2 %3 %4 @@ -83,8 +84,8 @@ %D12DCC% -B -M -N%BUILDROOT%\D120 /U%DCUOUTDIR% -H -W -Z IdCompressionIntercept.pas -$d-l- %DCCSWTS% if errorlevel 1 goto enderror -%NDD12%\Tools\brcc32.exe IndyProtocols120.rc -%NDD12%\Tools\brcc32.exe dclIndyProtocols120.rc +%BNDD12%\Tools\brcc32.exe IndyProtocols120.rc +%BNDD12%\Tools\brcc32.exe dclIndyProtocols120.rc %D12DCC% IndyProtocols120.dpk /Oobjs /m /h /w /N%BUILDROOT%\D120 /U%DCUOUTDIR% -$d-l-n+p+r-s-t-w- -I..\D120 %DCCSWTS% %BCBSWTS% %2 %3 %4 if errorlevel 1 goto enderror %D12DCC% dclIndyProtocols120.dpk /Oobjs /m /h /w /N%BUILDROOT%\D120 /U%DCUOUTDIR% -$d-l-n+p+r-s-t-w- %DCCSWTS% %BCBSWTS% %2 %3 %4 @@ -92,7 +93,7 @@ move /y *120.bpl %BINOUTDIR% >nul REM copy *120.dcp ..\..\D120 -copy %NDD12%\intermediate\release\dcp\*indy*120.dcp %DCPOUTDIR% +copy %BNDD12%\intermediate\release\dcp\*indy*120.dcp %DCPOUTDIR% CD .. goto endok
Dabei müßtest du "E:\Programme\Tiburon" durch den entsprechenden Pfad deiner C++Builder-Installation ersetzen.
-
Hallo zusamme
@audacia
Vielen dank für die Info. Werde das ganze mal herunterladen und die entsprechenden Anpassungen durchführen.Wenn ich mich jedoch recht erinnere muß ich davor das "alte" Indy Paket deinstallieren, oder?
Geht dies irgendwie automatisch, oder müssen hier irgendwelche Files von hand gelöscht werden?Vielen dank im voraus.
-
Hallo zusammen
@audacia
Nachdem ich nun die Dateien angepasst habe, bekomme ich beim compilieren von IndySystem120.dpk folgenden Fehler:Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. ready to compile System CodeGear Delphi für Win32 Compiler-Version 20.0 Copyright (c) 1983,2008 CodeGear IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdException.pas(116) IdVers.inc(3) IdCompilerDefines.inc(711) IdResourceStrings.pas(146) IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdStreamVCL.pas(119) IdStream.pas(43) IdGlobal.pas(6038) IdBaseComponent.pas(322) IdAntiFreezeBase.pas(165) IdCompilerDefines.inc(711) IdCTypes.pas(148) IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdWinsock2.pas(6501) IdWship6.pas(560) IdStackConsts.pas(759) IdCompilerDefines.inc(711) IdCompilerDefines.inc(711) IdStackWindows.pas(1640) IdStackBSDBase.pas(538) IdStack.pas(906) IdComponent.pas(214) IdCompilerDefines.inc(711) IdStruct.pas(212) IndySystem120.dpk(45) Schwerwiegend: F1026 Datei nicht gefunden: '\intermediate\release\lib.dpr' Error!
Der Compiler hat Recht, es gibt das lib.dpr nirgends auf meinem PC.
Irgendjemand eine Ahnung?
MfG Stephan
-
Sieht so aus, als hättest du beim Modifizieren von FullD12.bat einen Fehler gemacht. Nimm einfach obige Diffs und benutze patch, dann passieren dir keine Flüchtigkeitsfehler.
-
Hallo zusammen
@audacia
Mit Patch ware dies auch passiert. Hatte in der Pfadangabe am Ende noch ein LeerzeichenAlso das compilieren hat nun soweit funktioniert, zumindest keine Fehlermeldungen mehr.
Jedoch wie soll ich nun mit der Deinstallation umgehen (alles was irgendiwe Indy heißt löschen??)?
Vielen dank
MfG Stephan
-
Stephan schrieb:
Jedoch wie soll ich nun mit der Deinstallation umgehen (alles was irgendiwe Indy heißt löschen??)?
Den Inhalt von D120\bin, D120\include und D120\lib nach $(BDS) kopieren (Sicherheitskopien nicht vergessen). Damit keine unschönen Konflikte entstehen, solltest du auch die .lib- und .bpi-Dateien in $(BDS)\lib\debug durch die aus D120\lib\release ersetzen.
-
Hallo zusammen
@audacia
Compilieren und installieren hat nun soweit funktioniert.
Allerdings hat der TFTP Client immer noch einen Fehler, der BlockCounter beginnt nicht bei 1.
Hast Du eventuell noch einen Tipp wie ich nun die Pas-Datei debuggen kann?Zur FullD12.bat nochmals. Folgendes ist mir aufgefallen:
- BUILDROOT darf keine Leerzeichen enthalten
- NDD12 darf keine Leerzeichen enthalten
- brcc32.exe liegt bei C++Builder unter bin, tools gibt es nicht
- Die Änderungen von @@ -61,8 +62,8 @@ und @@ -83,8 +84,8 @@ haben nicht funktioniert (brcc32.exe wurde nicht gefunden)Vielen Dank nochmals für die Unterstützung.
MfG Stephan
-
Stephan schrieb:
Hast Du eventuell noch einen Tipp wie ich nun die Pas-Datei debuggen kann?
Du solltest ein Debug-Build erstellen können, wenn du beim Aufruf von DCC "-d+l+n+p+r-s-t-w+" ersetzt. Details über die Switches erfährst du mit "DCC32 -h". Vom Debug-Build brauchst du nur die statischen Libraries nach $(BDS)\lib\debug kopieren.
Stephan schrieb:
- brcc32.exe liegt bei C++Builder unter bin, tools gibt es nicht
- Die Änderungen von @@ -61,8 +62,8 @@ und @@ -83,8 +84,8 @@ haben nicht funktioniert (brcc32.exe wurde nicht gefunden)Stimmt, das hatte ich übersehen.
-
Hallo zusammen
@audacia
Das erstellen hat nun soweit auch als Debug funktioniert.
Habe ich allerdings auch die Möglichkeit direkt aus der IDE den Delphi Code zu debuggen? Denn mit dem Assemblercode welcher mir nun angeboten wird, fange ich leider wenig anVielen dank.
MfG StephanP.S. Ich hoffe, daß ich nicht langsam Anfange dich zu nerven.