Achim Kalwa 63 Posted March 1, 2021 (edited) I did a clean install of Delphi 10.4.2. One of the first steps is to compile and install GExperts. SVN revision 3449 compiled fine, but when running the "Register-GExperts-XX104.cmd" it fails with "Runtime error 217 at 50CDB390", followed by "Problem beim Starten von .\GExpertsRS104.dll. Eine DLL-Initialisierungsroutine ist fehlgeschlagen."  To trace the error I compiled GExperts in Debug mode, using Debug-DCUs. Then I used Run->Parameters to set "C:\Windows\System32\rundll32.exe" as "Host", and the full path to the compiled GExpertsRS104.dll and ",InstallGExperts" as parameter:  Host application: C:\Windows\System32\rundll32.exe  Parameters: C:\Full\Path\To\GExpertsRS104.dll,InstallGExperts  Now I could debug the installation from within the Delphi IDE. The startup-code InitUnits (in System.pas) initializes all units and calls class constructors; and in Vcl.WinXCtrls.pas it calls a class constructor TSearchBox.Create. This code creates an internal TImageCollection and adds two default images, which finally leads to TWICImage.Create in Vcl.Graphics.pas (Line 10624 ff).  The call to CoCreateInstance(CLSID_WICImagingFactory, ...) fails with error code $800401F0 = CO_E_NOTINITIALIZED = 'CoInitialize has not been called' and an exception is raised with message 'Cannot create instance of class CLSID_WICImagingFactory'.  To solve this problem, I need to insert CoInitialize(nil) somewhere, and because I won't change VCL and RTL units I had to find another place. Finally I found that the initialization block in GX_GenericUtils.pas is called some steps before the exception is raised, and already uses unit ActiveX, so I placed a CoInitialize(nil) in GX_GenericUtils.pas initialization block. initialization CoInitialize(nil); // this line added Initialize; ... And the error is gone! Finally I could install GExperts into Delphi 10.4.2 😉 [Yes, I know how to use RegEdit]. @dummzeuch : Maybe there is a better place to insert that missing CoInitialize(nil). Also I don't know if that call has side effects on older Delphi versions and should be surrounded by some IFDEFs. Since it is only one line inserted, I did not create a patch.  I'm going to report this new VCL bug to quality portal.  Thanks for reading, Achim Edited March 1, 2021 by Achim Kalwa QC -> Quality Portal 1 2 Share this post Link to post
Achim Kalwa 63 Posted March 1, 2021 Reported as https://quality.embarcadero.com/browse/RSP-33120 Feel free to vote 😉 Share this post Link to post
Achim Kalwa 63 Posted March 5, 2021 How nice. The issue RSP-33120 has been closed as "test case error" and the comment says: Quote The call to to call CoInitialize(nil) in such a case is up to the developer, as we cannot figure out all possible usage scenario, including COM invocation and threading models. Â Share this post Link to post
dummzeuch 1664 Posted March 6, 2021 Another option would have been to use the stand alone ExpertManager. That's what I did and it worked. Â I just used it to uninstall GExperts and tried your way. I got the same error, but only after the command line window seemed to hang and I closed it. Share this post Link to post
Ian Branch 141 Posted March 6, 2021 Hi Thomas, Errors when building #3451 D2007 & D10.4.1. Â Regards, Ian Share this post Link to post
Hunni 2 Posted March 7, 2021 Hi,  you must add to  <DCC_UnitSearchPath>. the following pathm ;..\..\source\Utils;$  then you can compile it again  Torsten Share this post Link to post
dummzeuch 1664 Posted March 7, 2021 9 hours ago, Ian Branch said: Errors when building #3451 D2007 & D10.4.1. Ooops, yes, I forgot to add the new unit to the other projects. Share this post Link to post