I wnder who maintains [WayBack] GExperts · GitHub:
GExperts has 4 repositories available. Follow their code on GitHub.
It has not been updated for about 5 years, but contains some important bits.
–jeroen
Posted by jpluimers on 2021/06/03
I wnder who maintains [WayBack] GExperts · GitHub:
GExperts has 4 repositories available. Follow their code on GitHub.
It has not been updated for about 5 years, but contains some important bits.
–jeroen
Posted in Delphi, Development, GExperts, Software Development | 1 Comment »
Posted by jpluimers on 2021/06/02
A long time ago, I wrote about Delphi prebuild/prelink/postbuild events.
In practice, especially that you cannot inherit build events, then add new ones (), it is convenient to put all you need in a script, for instance a batch file.
Passing parameters to that script, then in my experience, is easiest to do as environment variables.
That way you can do this in a script:
> %temp%\build.txt echo ~dp0=%~dp0 >> %temp%\build.txt echo $(BDS)=%BDS% >> %temp%\build.txt echo $(INPUTDIR)=%INPUTDIR% >> %temp%\build.txt echo $(PROJECTDIR)=%PROJECTDIR% >> %temp%\build.txt echo $(OUTPUTDIR)=%OUTPUTDIR% >> %temp%\build.txt echo $(Platform)=%Platform% if "%OUTPUTDIR:~0,2%"==".." set OUTPUTDIR=%INPUTDIR%%OUTPUTDIR% >> %temp%\build.txt echo $(OUTPUTDIR)=%OUTPUTDIR%
Passing the parameters and calling the script results in this build event contents:
set Platform=$(Platform) set INPUTDIR=$(INPUTDIR) set PROJECTDIR=$(PROJECTDIR) set OUTPUTDIR=$(OUTPUTDIR) call ..\post-build-event.bat
The IDE then shows this fragment in the project output:
Target PostBuildEvent: set Platform=Win32&&set INPUTDIR=D:\Versioned\TestRepostitory\Test Project With Spaces\&&set PROJECTDIR=D:\Versioned\TestRepostitory\Test Project With Spaces&&set OUTPUTDIR=..\EXE Output Directory With Spaces\&&call ..\post-build-event.bat
The above batch file also shows things:
OUTPUTDIR build parameter: check if the first two characters are .. (trick via [WayBack] Check if Batch variable starts with “…” – Stack Overflow).set assignments&& success operatorINPUTDIR and OUTPUTDIR end with a backslash, but PROJECTDIR does not (Delphi prebuild/prelink/postbuild events explains more about the parameters).Note:
BDS does not end in a backslash%~dp0 does end in a backslashWith this trick now you can copy BPL files for the right platform:
xcopy /y "%BDS%\Redist\%Platform%\rtl250.bpl" "%OUTPUTDIR%"
Note that the LibSuffix (with value 250 for Delphi 10.2 Tokyo) is not available as environment variable, nor build parameter. The environment variable ProductVersion however (with value 19.0 for Delphi 10.2 Tokyo) is. So technically, you could make a mapping.
–jeroen
Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | Leave a Comment »
Posted by jpluimers on 2021/06/01
In addition to [WayBack] c++ – DLL Load Library – Error Code 126 – Stack Overflow while debugging LoadLibrary error 126
Windows dll error 126 can have many root causes. The most useful methods I have found to debug this are:
- Use dependency walker to look for any obvious problems (which you have already done)
- Use the sysinternals utility [WayBack] Process Monitor – Windows Sysinternals | Microsoft Docs from Microsoft to trace all file access while your dll is trying to load. With this utility, you will see everything that that dll is trying to pull in and usually the problem can be determined from there.
Search for the first entry NAME NOT FOUND after your library is being loaded.
It indicates the module that cannot be found which indirectly causes error number 126 (ERROR_MOD_NOT_FOUND in [WayBack] System Error Codes (0-499) – Windows applications | Microsoft Docs ) in [WayBack] LoadLibrary:
ERROR_MOD_NOT_FOUND
- 126 (0x7E)
The specified module could not be found.
This is why I upvoted the very relevant comment:
… when I looked at the rows surrounding my dll being loaded I saw MSVCP140D.dll was giving a result of
NAME NOT FOUND. Turns out the machine that couldn’t load my dll doesn’t have the ‘D’ version of MSVCP140.dll. Everything worked when I built my dll for release! – [WayBack] Pakman.
–jeroen
Posted in Delphi, Development, Software Development, Windows Development | Leave a Comment »
Posted by jpluimers on 2021/06/01
ODAC version history is confusing wheres [WayBack] Oracle Data Access Components – FAQ talks about version 6.00, [WayBack] Oracle Data Access Components History talks about version 10.x.y.
The history page is correct.
–jeroen
Posted in Delphi, Development, Software Development | Leave a Comment »
Posted by jpluimers on 2021/05/27
Quoting this in full because it nicely illustrated the introduction of an intermediate variable that cannot be assigned to a second time after initial setup by the with statement: [WayBack] Embarcadero Newsgroup Archive :: embarcadero.public.delphi.ide :: Re: Delphi 2010 Compile error E2064 Left side cannot be assigned to.
Subject: Re: Delphi 2010 Compile error E2064 Left side cannot be assigned to Posted by: Uwe Schuster (jediv…@bitcommander.de) Date: Sat, 10 Oct 2009 Finn Tolderlund wrote:
> I get this error in Delphi 2010 with the code below:
> But if I remove the()from the line, it compiles and executes ok.
> Is it a bug in the compiler?
> …
>with (Pal.palPalEntry[i]) do // Compile error: E2064 Left side cannot be assigned to
>with Pal.palPalEntry[i] do // Works fineThis is no bug, because the parenthesis generates an intermediate
non-addressable value and D2010 does not longer allow write access to intermediate values with “with”.—
Uwe
This also might explain Delphi 10.2 Tokyo introduced a “with” warning: for most “with” statements, W1048 is raised ([RSP-17326] with statements generate W1048 unsafe typecast warning – Embarcadero Technologies), assuming that the intermediate is a pointer variable.
–jeroen
Posted in Delphi, Development, Software Development | Leave a Comment »
Posted by jpluimers on 2021/05/26
Bummer: I tried to inherit the build events from a base configuration, then add some extra steps for some of the inheriting configurations.
Those configurations just executed the extra steps, not the inherited steps.
This affects Visual Studio, Delphi and any other tool based on msbuild, as this is an ms-build thing:
How do I then specify additional project-specific Post-Build Events? The usual “Inherit from parent or project defaults” is missing, and I would rather not have to manually add
barto every single project as it makes it hard to maintain.
–jeroen
Posted in .NET, Continuous Integration, Delphi, Development, msbuild, Software Development, Visual Studio and tools | Leave a Comment »
Posted by jpluimers on 2021/05/26
Got the below error on Delphi 10.2 Tokyo with ODAC trial from DevArt at Delphi startup time (Error: Access violation at address 188F3528 in module 'DataSetManager250.bpl'. Read of address 00000000.).
My guess it is some configuration prerequisite which – when not existing – is handled very ungracefully.
This might have to do with my installation being a non-administrator Delphi user, but the ODAC installation requiring UAC elevation to administrative level.
In short this means the installing user is different from the user that runs Delphi.
Related (indicating it was fixed years ago, but apparently isn’t) via dsmtoolwindow.getpreferences – Google Search:
try to change the registry branch:
HKEY_CURRENT_USER\Software\Devart\DataSetManager\BDS\13.0to
HKEY_CURRENT_USER\Software\Devart\DataSetManager\BDS\14.0(change the version number
13.0to14.0)
Workaround is to unregister the DataSetManager250.bpl package, though I have to figure out what functionality that disables.
[188F3528]{DataSetManager250.bpl} Dsmtoolwindow.GetPreferences + $18 [23CA524D]{Jcl240.bpl } Jclhookexcept. + $0 [50060B13]{rtl250.bpl } System.@HandleAnyException (Line 19991, "System.pas" + 13) + $0 [211B3A05]{designide250.bpl} DockForm.TDockableForm.FormCreate (Line 258, "DockForm.pas" + 11) + $1B [188F2DEA]{DataSetManager250.bpl} Dsmtoolwindow.TDsmToolWindow.FormCreate + $4E [50C06BC1]{vcl250.bpl } Vcl.Forms.TCustomForm.DoCreate (Line 3788, "Vcl.Forms.pas" + 3) + $C [50C067DD]{vcl250.bpl } Vcl.Forms.TCustomForm.AfterConstruction (Line 3671, "Vcl.Forms.pas" + 1) + $D [50060039]{rtl250.bpl } System.@AfterConstruction (Line 18301, "System.pas" + 2) + $5 [188EBE9B]{DataSetManager250.bpl} Dsmtoolwindow.TDsmToolWindow + $43B [188EA93D]{DataSetManager250.bpl} Dsmtoolwindow.TDsmToolWindow.CreateForm + $19 [188F7C81]{DataSetManager250.bpl} Dsmexpert.initialization + $31 [50061276]{rtl250.bpl } System.InitUnits (Line 22833, "System.pas" + 21) + $0 [500612E6]{rtl250.bpl } System.@PackageLoad (Line 22861, "System.pas" + 8) + $0 [188A1A09]{DataSetManager250.bpl} __dbk_fcall_wrapper + $195 [188F6DA1]{DataSetManager250.bpl} Initialize + $5 [500A0377]{rtl250.bpl } System.SysUtils.InitializePackage (Line 25779, "System.SysUtils.pas" + 4) + $0 [500A04D1]{rtl250.bpl } System.SysUtils.LoadPackage (Line 25830, "System.SysUtils.pas" + 18) + $5 [21E1AFAF]{delphicoreide250.bpl} PasCppPakMgr.TIDEDesignPackage.ClearModules (Line 2189, "PasCppPakMgr.pas" + 14) + $10 [204E9A94]{coreide250.bpl} PakLoad.TPackage.DoLoadPackage (Line 146, "PakLoad.pas" + 0) + $8 [204E9C09]{coreide250.bpl} PakLoad.TPackage.Load (Line 220, "PakLoad.pas" + 7) + $7 [204EC425]{coreide250.bpl} PakMgr.TDesignPackage.Load (Line 591, "PakMgr.pas" + 2) + $2 [21E1B2CB]{delphicoreide250.bpl} PasCppPakMgr.TIDEDesignPackage.Load (Line 2292, "PasCppPakMgr.pas" + 4) + $3 [50060039]{rtl250.bpl } System.@AfterConstruction (Line 18301, "System.pas" + 2) + $5 [21E1B0DF]{delphicoreide250.bpl} PasCppPakMgr.TIDEDesignPackage.DelayLoad (Line 2217, "PasCppPakMgr.pas" + 11) + $4 [21E1572A]{delphicoreide250.bpl} PasCppPakMgr.LoadDesignPackage (Line 463, "PasCppPakMgr.pas" + 10) + $5 [0B6A0F84]{IDEFixPack.dll} SplashProgress2005p.HookedLoadDesignPackage (Line 277, "SplashProgress2005p.pas" + 3) + $3 [21E15A33]{delphicoreide250.bpl} PasCppPakMgr.LoadProjectPackages (Line 534, "PasCppPakMgr.pas" + 52) + $11 [21F20DBF]{delphicoreide250.bpl} BasePasProjOpts.TProjOptsManager.DoLoadPackages (Line 1604, "BasePasProjOpts.pas" + 22) + $6 [21F21BB4]{delphicoreide250.bpl} BasePasProjOpts.TProjOptsManager.LoadPackages (Line 1839, "BasePasProjOpts.pas" + 0) + $0 [21F22BD5]{delphicoreide250.bpl} BasePasProjOpts.TProjectOptions.LoadPackages (Line 2419, "BasePasProjOpts.pas" + 0) + $5 [22585BF3]{delphide250.bpl} DelphiProject.TDelphiProjectCreationTrait.LoadDefaultLibraries (Line 256, "DelphiProject.pas" + 1) + $1F [2058A109]{coreide250.bpl} ProjectGroup.TDefaultProjectWrapper.LoadDefaultLibraries (Line 3544, "ProjectGroup.pas" + 5) + $31 [206DB2B9]{coreide250.bpl} Desktop.LoadDefaultDesktopState (Line 966, "Desktop.pas" + 3) + $9 [206DC0D5]{coreide250.bpl} Desktop.LoadDesktop (Line 1223, "Desktop.pas" + 73) + $0 [0049FBA8]{bds.exe } AppMain.PostCreateInit (Line 2154, "AppMain.pas" + 57) + $0 [004A00B6]{bds.exe } AppMain.TAppBuilder.CMPostCreateInit (Line 2257, "AppMain.pas" + 4) + $1 [50AC4C16]{vcl250.bpl } Vcl.Controls.TControl.WndProc (Line 7326, "Vcl.Controls.pas" + 91) + $6 [50C110C3]{vcl250.bpl } Vcl.Forms.TApplication.WndProc (Line 10270, "Vcl.Forms.pas" + 194) + $1 [50AC97FB]{vcl250.bpl } Vcl.Controls.TWinControl.WndProc (Line 10197, "Vcl.Controls.pas" + 166) + $6 [50C080B5]{vcl250.bpl } Vcl.Forms.TCustomForm.WndProc (Line 4546, "Vcl.Forms.pas" + 209) + $5 [50AC8DC8]{vcl250.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 9896, "Vcl.Controls.pas" + 3) + $6 [5016EBC4]{rtl250.bpl } System.Classes.StdWndProc (Line 17406, "System.Classes.pas" + 9) + $2 [50C11A6F]{vcl250.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 10613, "Vcl.Forms.pas" + 23) + $1 [50C11AB2]{vcl250.bpl } Vcl.Forms.TApplication.HandleMessage (Line 10643, "Vcl.Forms.pas" + 1) + $4 [50C11DE5]{vcl250.bpl } Vcl.Forms.TApplication.Run (Line 10781, "Vcl.Forms.pas" + 26) + $3 [005088E2]{bds.exe } bds.bds (Line 212, "" + 7) + $7
Notes:
%APPDATA% points to %USERPROFILE%\AppData\Roaming (where usually %USERPROFILE% is on the %HOMEDRIVE%)Fix script (the double backslash \\ is needed, otherwise the final double quote " becomes part of the path name):
setlocal :: 19.0 is the version for Delphi 10.2 Tokyo set ProductVersion=19.0 reg add "HKEY_CURRENT_USER\Software\Devart\DataSetManager\BDS\%ProductVersion%" /v "ConfigFilePath" /f /t REG_SZ /d "%APPDATA%\Embarcadero\BDS\%ProductVersion%\\" endlocal
This allows for an XML file named DataSetManager.cfg to be created in the ConfigFilePath directory.
Even though Process Monitor will show access to the below keys, there is no need to add any values there:
KEY_CURRENT_USER\Software\Devart\DBMonitorKEY_CURRENT_USER\SOFTWARE\Devart\ODACHKLM\Software\WOW6432Node\Devart\ODACHKLM\Software\WOW6432Node\Devart\OdacAnother thing when running ODAC trial and licensed applications
--------------------------- ODAC --------------------------- %1 is not a valid Win32 application ODAC Trial version needs additional "bpl" files to be present on the user PC. If you build your project without run-time packages you need: dac250.bpl odac250.bpl --------------------------- OK ---------------------------
This message is incomplete; what it should say is that any BPL dependencies must be deployed. One way to find out about those is to use I wanted to know the loaded DLLs in a process like Process Explorer shows, but from the console: Sysinternals ListDLLs to the rescue.
Another way is to use TDUMP (see [WayBack] TDUMP.EXE, the File Dumping Utility) and search for the import tables. I did just that for the 10.2 trial; below is the full list.
There is way better documentation at Devart ODAC Deployment: Deploying Windows applications built without run-time packages which fails to properly archive in the WayBack machine (it gets into a redirect loop) so I quote it in full:
Deploying Windows applications built without run-time packages
You do not need to deploy any files with ODAC-based applications built without run-time packages, provided you are using a registered version of ODAC.
You can check your application does not require run-time packages by making sure the “Build with runtime packages” check box is not selected in the Project Options dialog box.
Trial Limitation Warning
If you are evaluating deploying Windows applications with ODAC Trial Edition, you will need to deploy the following DAC BPL files:
dacXX.bpl always odacXX.bpl always and their dependencies (required IDE BPL files) with your application, even if it is built without run-time packages:
rtlXX.bpl always dbrtlXX.bpl always vcldbXXX.bpl always Deploying Windows applications built with run-time packages
You can set your application to be built with run-time packages by selecting the “Build with runtime packages” check box in the Project Options dialog box before compiling your application.
In this case, you will also need to deploy the following BPL files with your Windows application:
dacXX.bpl always odacXX.bpl always dacvclXX.bpl if your application uses the OdacVcl unit odacvclXX.bpl if your application uses the OdacVcl unit crcontrolsXX.bpl if your application uses the CRDBGrid component
From those posts and the below full list, you also need to deploy the bold dependencies:
dac250.bpl
rtl250.bpldbrtl250.bplodac250.bpl
rtl250.bpldbrtl250.bpldac250.bplTo get around errors like "E2202 Required package 'odac' not found", you need to ensure the correct .dcp files for ODAC are referenced.
Unlike Delphi, the ODAC .dcp files contain a version number, so in your required packages list, ensure you add them not like rtl;dbrtl, but like dac250;odac250.
dac250.bpl Imports from kernel32.dll Imports from rtl250.bpl Imports from wsock32.dll Imports from dbrtl250.bpl Imports from ole32.dll Imports from user32.dll dacfmx250.bpl Imports from kernel32.dll Imports from rtl250.bpl Imports from dbrtl250.bpl Imports from user32.dll Imports from fmx250.bpl Imports from dac250.bpl dacvcl250.bpl Imports from kernel32.dll Imports from rtl250.bpl Imports from dbrtl250.bpl Imports from user32.dll Imports from dac250.bpl Imports from vcl250.bpl dcldac250.bpl Imports from vclactnband250.bpl Imports from wininet.dll Imports from shell32.dll Imports from user32.dll Imports from version.dll Imports from oleaut32.dll Imports from dac250.bpl Imports from dacvcl250.bpl Imports from vcldb250.bpl Imports from dcldb250.bpl Imports from xmlrtl250.bpl Imports from kernel32.dll Imports from rtl250.bpl Imports from designide250.bpl Imports from ole32.dll Imports from dbrtl250.bpl Imports from gdi32.dll Imports from vcl250.bpl odac250.bpl Imports from kernel32.dll Imports from rtl250.bpl Imports from dbrtl250.bpl Imports from version.dll Imports from user32.dll Imports from dac250.bpl Imports from advapi32.dll odacvcl250.bpl Imports from kernel32.dll Imports from odac250.bpl Imports from rtl250.bpl Imports from dbrtl250.bpl Imports from dac250.bpl Imports from dacvcl250.bpl Imports from vcl250.bpl dclodac250.bpl Imports from vclactnband250.bpl Imports from odac250.bpl Imports from dcldac250.bpl Imports from odacvcl250.bpl Imports from shell32.dll Imports from user32.dll Imports from dac250.bpl Imports from dcldb250.bpl Imports from vcldb250.bpl Imports from dacvcl250.bpl Imports from vclimg250.bpl Imports from kernel32.dll Imports from xmlrtl250.bpl Imports from rtl250.bpl Imports from designide250.bpl Imports from dbrtl250.bpl Imports from vcl250.bpl odacfmx250.bpl Imports from kernel32.dll Imports from odac250.bpl Imports from rtl250.bpl Imports from dacfmx250.bpl Imports from dbrtl250.bpl Imports from fmx250.bpl Imports from dac250.bpl dclodacfmx250.bpl Imports from kernel32.dll Imports from odac250.bpl Imports from odacfmx250.bpl Imports from rtl250.bpl Imports from dacfmx250.bpl Imports from dbrtl250.bpl Imports from fmx250.bpl Imports from dac250.bpl oraprov250.bpl Imports from kernel32.dll Imports from odac250.bpl Imports from dsnap250.bpl Imports from rtl250.bpl Imports from dbrtl250.bpl Imports from dac250.bpl dcloraprov250.bpl Imports from kernel32.dll Imports from odac250.bpl Imports from dsnap250.bpl Imports from rtl250.bpl Imports from dbrtl250.bpl Imports from oraprov250.bpl Imports from dac250.bpl datasetmanager250.bpl Imports from vclactnband250.bpl Imports from dcldac250.bpl Imports from comctl32.dll Imports from user32.dll Imports from dac250.bpl Imports from vclx250.bpl Imports from dacvcl250.bpl Imports from dcldb250.bpl Imports from vcldb250.bpl Imports from kernel32.dll Imports from xmlrtl250.bpl Imports from rtl250.bpl Imports from designide250.bpl Imports from dbrtl250.bpl Imports from gdi32.dll Imports from vcl250.bpl crcontrols250.bpl Imports from kernel32.dll Imports from rtl250.bpl Imports from dbrtl250.bpl Imports from user32.dll Imports from dac250.bpl Imports from vcldb250.bpl Imports from vcl250.bpl Imports from gdi32.dll dclcrcontrols250.bpl Imports from kernel32.dll Imports from rtl250.bpl Imports from dbrtl250.bpl Imports from crcontrols250.bpl Imports from dac250.bpl Imports from vcldb250.bpl Imports from vcl250.bpl oramigwizard250.dll Imports from vclactnband250.bpl Imports from odac250.bpl Imports from odacvcl250.bpl Imports from dcldac250.bpl Imports from shell32.dll Imports from user32.dll Imports from dac250.bpl Imports from vclx250.bpl Imports from dcldb250.bpl Imports from vcldb250.bpl Imports from dacvcl250.bpl Imports from vclimg250.bpl Imports from kernel32.dll Imports from xmlrtl250.bpl Imports from dclodac250.bpl Imports from rtl250.bpl Imports from designide250.bpl Imports from dbrtl250.bpl Imports from vcl250.bpl packagewizard250.dll Imports from vclactnband250.bpl Imports from odac250.bpl Imports from odacvcl250.bpl Imports from dcldac250.bpl Imports from dac250.bpl Imports from vclx250.bpl Imports from dacvcl250.bpl Imports from vcldb250.bpl Imports from dcldb250.bpl Imports from vclimg250.bpl Imports from kernel32.dll Imports from xmlrtl250.bpl Imports from dclodac250.bpl Imports from rtl250.bpl Imports from designide250.bpl Imports from dbrtl250.bpl Imports from vcl250.bpl
–jeroen
Posted in Delphi, Delphi 10.2 Tokyo (Godzilla), Development, Software Development | Leave a Comment »
Posted by jpluimers on 2021/05/25
Often it is useful to have 3rd party components part of a repository so it is easier to increase portability.
For instance when you want to include or exclude some of them in certain projects by installing/deinstalling them to/from the IDE.
This can be useful for cases where components bite each other, or you want to vary the components in use by version without spinning up new VMs (Delphi registration counts can be a pain for new VMs; you need to be very careful as you can never decrease your registration count).
I usually do this by having 3 batch files:
If successful, I can uninstall the library.
I especially take this approach with 3rd party libraries that stuff to global places (inside the Delphi installation directory, or worse, inside the Windows directories).
That way, I can try to ensure that compilation of running only uses files from the repository, making my options for portability larger.
Examples I did this for are for instance QuickReports and ODAC.
Some bits are tricky to get right, especially loading dependencies.
It helps to understand that for executable files Windows also searches for dependencies in the directory of the executable file.
For libraries, that does not happen. Which means that if a BPL has dependencies, they either have to be explicitly loaded before (for instance by being in the Known Packages registry entries), or on the search PATH.
Delphi has the %BDSCOMMONDIR% directory in the search PATH. It usually points to “%PUBLIC%\Documents\Embarcadero\Studio\%ProductVersion%\Bpl” (where ProductVersion=19.0 for Delphi 10.2 Tokyo).
There might be a away around this using manifests, but this means modifying the BPL files, which is beyond the point of having these copy scripts.
More on those environment variables in a later blog post.
Related:
–jeroen
Posted in Conference Topics, Conferences, Delphi, Delphi 10.2 Tokyo (Godzilla), Development, Event, Software Development | Leave a Comment »
Posted by jpluimers on 2021/05/20
In Windows, historically most people approach investigation GUI first. Having turned 50 a while ago, I am no exception.
My real roots however are on the command-line and scripting: roughly 1980s Apple DOS, CP/M, SunOS (yay sh Bourne shell!), MS-DOS, 4DOS, and VAX/VMS (yay DCL shell!), from the 1990s on, some Solaris, a little bit of AIX, HP-UX and quite a bit of Linux, MacOS (né OS/X né Mac OS), and some BSD descendants derivatives (SunOS, AIX and MacOS are based on the Berkeley Software Distribution), and this century a more growing amount of PowerShell).
So I was glad to find out the makers of Process Explorer also made [WayBack] ListDLLs – Windows Sysinternals | Microsoft Docs (via windows get dlls loaded in process – Google Search)
List all the DLLs that are currently loaded, including where they are loaded and their version numbers.
ListDLLs is a utility that reports the DLLs loaded into processes. You can use it to list all DLLs loaded into all processes, into a specific process, or to list the processes that have a particular DLL loaded. ListDLLs can also display full version information for DLLs, including their digital signature, and can be used to scan processes for unsigned DLLs.
Usage
listdlls [-r] [-v | -u] [processname|pid]
listdlls [-r] [-v] [-d dllname]
Parameter Description processname Dump DLLs loaded by process (partial name accepted). pid Dump DLLs associated with the specified process id. dllname Show only processes that have loaded the specified DLL. -r Flag DLLs that relocated because they are not loaded at their base address. -u Only list unsigned DLLs. -v Show DLL version information.
Download: [WayBack] ListDlls.zip.
Now it is much easier to generate a draft deploy list of DLLs (and for Delphi: BPLs) based on a process running on a development machine.
Example output (the -r flags relocation warnings; the first part is the [WayBack] shim that Chocolatey created around the second which is from SysInternals):
Posted in Conference Topics, Conferences, Delphi, Development, Event, History, Software Development, Windows Development | Leave a Comment »
Posted by jpluimers on 2021/05/20
A few notes on the ODAC install:
The 25 is
DllSuffixminus trailing zero for Delphi 10.2 Tokyo, or the “real” Delphi version; see Delphi version info table.
%USERPROFILE% directory of the local administrator user that installed it: %USERPROFILE%\Documents\Devart\ODAC for RAD Studio 10.2\Demos
%PUBLIC%\Documents\Devart\ODAC for RAD Studio 10.2\Demos%ProgramFiles(x86)%\Devart\ODAC for RAD Studio 10.2–jeroen
Posted in Delphi, Development, Software Development | Leave a Comment »