The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 4,262 other subscribers

Archive for May 24th, 2018

Fixing the WSDLImp command-line Delphi WSDL importer to parse WSDL files including XSD files using xsd:group at the top level

Posted by jpluimers on 2018/05/24

I finally found out the cause of the Delphi WSDL Importer generating wrong .pas files when the WSDL file includes an XSD file that uses an xsd:group (see below) at the top-level.

The resulting access violation was caused by forgetting a nil check for a Context (at the top-level it is nil because there is no encompassing type yet; xsd:group can be at the top-level).

There might also be other WSDL/XSD constructs leading to the same code path: a good set of WSDL/XSD combination would be needed for proper integration testing on this. Hopefully, Embarcadero has such a set.

Patches

All patches are at https://gist.github.com/jpluimers/2824c03ae816229a53ffa4830b2d6208. If you need a binary build that includes the patches, drop a comment below.

Before fixing, I had to get it building which required modifying the search path and output path (both see Delphi WSDL importer compiler defines). This is the first patch below (which results includes a huge .dproj change as that’s what the IDE does to a project when you change just a few simple things).

The second patch below is the fix.

The fix is to replace if (TypeDef.IsAnonymous) then by if (TypeDef.IsAnonymous) and Assigned(Context) then in side the function TWSDLTypeImporter.AddComplexType of WSDLImpWriter.pas.

After careful checking of the group handling (around etElementGroup, cmGroupRef,  xtiElemGroupIXMLElementGroup, IXMLElementGroups), no other fixes are needed as the rest of the xsd:group handling functions correctly at least for the WSDL/XSD combinations I had to import.

During fixing, I found some compiler defines would produce much more output. That output tremendously helped finding out if xsd:group handling was indeed correct.

In the third patch, I have added another modification that introduces a new -logall command-line parameter that enables all these in one go.

I have handed over the patches through internal channels in order to circumvent a long and tedious QC/QualityPortal process. Hopefully they will make it in the next major Delphi version.

Related

Patches generated by following the steps in [WayBack] Generate a git patch for a specific commit – Stack Overflow:

git format-patch -1 <<commit-SHA>>

Command-line parameters

The WSDLImp has many command-line parameters, some of which are not accessible from the IDE expert. More information on these at:

xsd:group

An xsd:group contains a group of definitions. It is similar to a list of fields in a record/class/interface in Delphi that you can use in multiple record/class/interface definitions. The group only has a name at the XSD level, but not at the Delphi generated code level: there the group is expanded in each place it is used.

More information: [WayBack] xsd – How to use the xml schema group element – Stack Overflow

–jeroen

Read the rest of this entry »

Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | 12 Comments »

Indy repo URLs and nightly builds

Posted by jpluimers on 2018/05/24

For my link archive:

Password embedded Indy SVN repository URLs

Based on [WayBack] Indy Subversion Source Access

This might come in handy: [WayBackCreating a two way sync between a Github repository and Subversion – Ben Lobaugh Online

Nightly Indy builds

Via [WayBack] Indy DevSnapshot and https://gitter.im/IndySockets/Indy

–jeroen

Posted in Delphi, Development, Indy, Software Development | 2 Comments »

Getting the new MMX from Raabe Software to work when installing it as separate Administrative user

Posted by jpluimers on 2018/05/24

I have a policy to install software with a separate Administrative user, but develop with a normal non-Administrative user.

For some software, this creates problems, either because it cannot cope while running as a non-UAC user, or because they write their configuration (either on disk or in the registry) to the user that installed the software as opposed to:

  • write the configuration as a template to a generic place (like %ProgramData% or HKLM) then
  • apply that template when a user first runs the software

ModelMaker Code Explorer does the latter, of which I earlier wrote about in Fixing Unable to create ModelMaker Tools Shared Directory and Cannot create file “C:\HungarianTypeLookup.txt”. Access is denied..

Uwe Rabbe (who now maintains MMX) will fix this, but until then, you either will see no MMX menu entry at all, or get errors like the ones below.

Others have ran into them as well, so hopefully these steps will provide a fix for them as well, see

I think the best fix is for the installer to detect if it is being run as regular user or administrator, then decide upon those where to write in the registry. I’m not sure though how other Delphi experts handle this, so I am open on input from other parties.

Steps below are based on

No MMX in the Delphi menu at all

This likely means MMX is not registered in the registry for the current user.

Read the rest of this entry »

Posted in Delphi, Development, ModelMaker Code Explorer, Software Development | 3 Comments »

Inspect (Windows) to find Automation properties and control patterns, as well as Microsoft Active Accessibility properties

Posted by jpluimers on 2018/05/24

Inspect (Inspect.exe) is a Windows-based tool that enables you select any UI element and view the element’s accessibility data. You can view Microsoft UI Automation properties and control patterns, as well as Microsoft Active Accessibility properties. Inspect also enables you to test the navigational structure of the automation elements in the UI Automation tree, and the accessible objects in the Microsoft Active Accessibility hierarchy.

Inspect is installed with the Windows Software Development Kit (SDK) for Windows 8. (It is also available in previous versions of Windows SDK.) It is located in the \bin\<platform> folder of the SDK installation path (Inspect.exe).

[WayBackInspect (Windows)

via [WayBack] Before i start hooking the windows messages for bds i would like to ask if there is a way to trigger “save all” from outside? – Attila Kovacs – Google+

–jeroen

Posted in Development, Software Development, Usability, User Experience (ux) | Leave a Comment »