Impact Acquire SDK C++
The Presence Of A 3rd Party GenTL Producer Results In Impact Acquire To Crash

Symptoms

When trying to start any Impact Acquire related application the process crashes immediately when processing the mvGenTLConsumer library which is part of the GenICam™ related sections of the Impact Acquire framework.

Cause

This most likely is a compatibility issue with the third party library. Since Impact Acquire 2.32.0 every GenTL producer detected on the system will be loaded in order to allow to work with a wider variety of devices. See Setting Up The Framework For Third Party GenTL Producer Usage for details. This introduces a dependency to libraries that hasn't been there in previous versions and therefore might affect the runtime behaviour. Third party packages either not properly installed or with bugs might therefore crash an Impact Acquire process. Great care has been taken to ensure maximum stability and interoperability but the amount of third party software out there is huge.

Resolution

Identify which package is causing the crash. Several things can help doing this:

  • Check your systems environment variables GENICAM_GENTL32_PATH (for 32-bit producers) or GENICAM_GENTL64_PATH (for 64-bit producers). Impact Acquire will try to load libraries from any path listed here!
  • Within these directories check for files with the extension *.cti. These will be loaded!
  • Have a look at the log output of Impact Acquire. For every GenTL producer loaded or not loaded there will be a log message. The last library loaded is most likely responsible for the crash!
  • Rename the *.cti files until you have found the culprit
  • Now either remove the package if is is not needed OR tell Impact Acquire NOT to attempt to load this GenTL producer.

How To Ignore A Particular Producer

One or multiple producers can be excluded from being loaded by Impact Acquire by creating a file named features.xml in $(MVIMPACT_ACQUIRE_DATA_DIR). The example from below can be modified as needed.

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<PropList name="Features" flags="17">
<PropList name="mvGenTLConsumer" flags="17">
<Property name="ProducersToIgnore" flags="5" size="1" valType="4">
<!--
Add one 'Value' node for every producer you want to ignore. Increment the 'index' attribute
for each entry (0 based, no gaps) and set the 'size' attribute of the 'Property' node from
above to the total number of 'Value' nodes.
-->
<Value index="0" val="ACME.GenTL.Producer.cti"></Value>
</Property>
</PropList>
</PropList>