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 Leerzeichen 😢

    Also 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 "-dln+p+rstw"durch"d-l-n+p+r-s-t-w-" durch "-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 an 😢

    Vielen dank.
    MfG Stephan

    P.S. Ich hoffe, daß ich nicht langsam Anfange dich zu nerven.


Anmelden zum Antworten