3

Until now I've been using Indy 10 without issues but after recent problem with installation of TMS component pack I am looking for alternative way to upgrade Indy. TMS installs fine on clean system with CB2010 but when I upgrade Indy using the procedure below I get errors when starting IDE and right after TMS installation - the error is: The procedure entry point @Idhttp@TidCustomHTTP@GetRequestHeaders$qqrv could not be located in the dynamic link library IndyProtocols140.bpl. Obviously some problem on my side as TMS does install on clean installation without Indy upgrade.

So perhaps it might install properly if I overwrite Indy files with newer versions.

Here is installation procedure for Indy upgrade I use right now (and which has been working until TMS installation):

  1. Start IDE and remove Indy10 Protocols Design Time and Indy10 Core Design Time packages

  2. Run this script which removes old Indy files:

    del /q "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\Indy10\*.*"
    del /q "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\debug\Indy10\*.*"
    del /q "c:\Program Files\Embarcadero\RAD Studio\7.0\include\Indy10\*.*"
    del /q /s "c:\Program Files\Embarcadero\RAD Studio\7.0\source\Indy\Indy10\*.*"
    
    
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\debug\IndyCore.bpi"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\debug\IndyCore.lib"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\debug\IndyProtocols.bpi"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\debug\IndyProtocols.lib"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\debug\IndySystem.bpi"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\debug\IndySystem.lib"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\release\IndyCore.bpi"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\release\IndyCore.lib"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\release\IndyProtocols.bpi"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\release\IndyProtocols.lib"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\release\IndySystem.bpi"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\release\IndySystem.lib"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\bin\IndyCore140.bpl"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\bin\IndyProtocols140.bpl"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\bin\IndySystem140.bpl"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\bin\dclIndyCore140.bpl"
    del "c:\Program Files\Embarcadero\RAD Studio\7.0\bin\dclIndyProtocols140.bpl"
    
  3. Unpack new Indy installation in "c:\code\indy" and open IndySystem140.dpk, IndyCore140.dpk, IndyProtocols140.dpk, dclIndyCore140.dpk, dclIndyProtocols140.dpk in that order.

  4. Modify compile options to Generate all C++ Builder files (including package libs) for each of above packages.

  5. Set all packages to Release and build them in above order.

  6. Also Install for last two

  7. Add Include and Library paths to "c:\code\indy\Core" (and same for Protocols and System)

I also messed around with FullC140.bat script that comes with Indy but didn't quite install it properly like with above.

Has anyone successfully updated Indy and installed TMS on top of it?

Does my batch script delete some files which it shouldn't?

Coder12345
  • 3,431
  • 3
  • 33
  • 73
  • 3
    For C++ Builder, I recommend using the [pre-built downloads Indy 10](http://mjfreelancing.com/index.php?option=com_content&view=article&id=13&Itemid=16), by Malcolm Smith. – stukelly Feb 27 '12 at 20:30
  • Yes, I've considered that too and I've seen that the script FullC140 is even authored by Malcolm Smith, but this is not option for me because I need a small modification to Indy before compiling it (a small change to IdAllHeaderCoders.pas which fixes one other problem :) Furthermore, Malcolm is not updating these files too often (last update was 2 months ago which is fine if the fix you really need wasn't checked-in 1 day ago!). – Coder12345 Feb 28 '12 at 14:55

1 Answers1

5

The TMS package that is erroring was compiled to link against the Indy packages that were pre-installed with the IDE. Your Indy upgrade breaks that TMS package because of an interface change in Indy's IdHTTP.pas unit (specifically, the GetRequestHeaders() method of TIdCustomHTTP was renamed to GetRequest()). To address the error, either the failing TMS package will have to be recompiled to link against the upgraded Indy packages, or you will have to revert that change in IdHTTP.pas and recompile Indy again.

Remy Lebeau
  • 555,201
  • 31
  • 458
  • 770
  • Actually TMS authors say they don't use Indy. But I just discovered that this call was required by dclDataSnapIndy10 package. When I removed this package from IDE the error is gone. This package was linked to previously installed Indy which was removed and updated. What is dclDataSnapIndy10 for? Somehow installation of TMS and DataSnapIndy10 are connected... – Coder12345 Feb 27 '12 at 16:40
  • 1
    Comments regarding DataSnap's breakage when upgrading Indy 10 are already mentioned on the installation page of Indy's website: http://www.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx – Remy Lebeau Feb 27 '12 at 23:50
  • Thanks, I simply removed DataSnap as I don't need it but hopefully TMS won't depend on it possibly a glitch in installation package. Hopefully this helps someone installing TMS with updated Indy10. – Coder12345 Feb 28 '12 at 00:20
  • At least some TMS TPlanner addins do reference the original Indy and if you've built a package to use them it will have to be recompiled as Remy said. I just found that out. – fullerm Nov 11 '17 at 20:48
  • I know this post and answer is very old and stuff has evolved, facing a similar issue now, on Delphi 11, just upgraded my Indy, and getting many errors related to TMS components relying on Indy, for example Sphinx, is there a proper way to resolve this now @RemyLebeau – Alec Aug 27 '23 at 13:58
  • 1
    @Alec the previous comments still apply. If a given component/package (ie TMS) depends on a given version of another component/package (ie Indy) and then the latter is updated in a way that breaks the former's dependency, then the former needs to be recompiled. Delphi has always worked this way. It is not specific to just TMS/Indy – Remy Lebeau Aug 27 '23 at 16:01