Frequently Asked Questions


The FAQ page shows the following topics:

Listed below are the questions that we are asked quite often.

General

Programming

Documentation

Licensing, Deploying and Distribution

Unicode

General

How much does your component cost?

You can do the following:
  • Go to the product page, and click the icon located in the right side of the page. In case you wish to order the eXSuite package, but you can't make the full payment at once, please contact us, and we will provide you separate links to make the multiple payments. Once all payments are completed, you will receive all the information to download and get the full package, including all your development license keys.
  • Download and install the product. Open its CHM file which is the product's help file and locate the Pricing section. For instance, if you have installed the exg2antt component, open your start\run field and type exg2antt.chm. The Exontrol ExG2antt Help window is opened, where you will see the Pricing section. The help files shows prices in USD at conversion rate 1.2 ( which is the initial EUR/USD conversion rate ). You need to consult the website for prices in USD, at the day you want to place your order.

The prices on the website are shown in EUR and USD, while the USD or any other currency may vary on the daily exchange rate. The EUR/USD conversion rate is handled and controlled by ShareIt/Digital-River which is our official reseller.

May I try the product before I buy?

Yes. All Exontrol products are available for an unlimited time evaluation. Customers are encouraged to fully evaluate the software prior to purchasing a software license. Evaluation software may be downloaded from the Exontrol web site, is fully functional, and includes complete online documentation. During the evaluation period, you can contact technical support here.

Exontrol believes strongly that no customer should have to buy software in order to find out how well it works. Software purchases should be based on thorough evaluation of the most current, fully functional technology. Users should be able to test every feature of a software package for functionality and compatibility. Exontrol software can be evaluated with no limitations in capabilities.

Do you sell your product using royalty free runtime license?

Yes. All of our controls are royalty-free and run-time license-fee free. This means that when you purchase our products (one copy per developer on your project), you may distribute the component you purchased with your applications without paying any run-time fees to us.

Our subscription is about to expire. How can I proceed to renew?

You are entitled to get the the latest released version ( not including the source code, unless you do not have a subscription for it ), free of charge, for 1 Year from the purchase date. Our development team is committed to keeping in step with new technology, and Exontrol' subscription service is a convenient way to ensure your developers are always using the latest versions of our products.  

If your subscription is not expired, you can renew the products you purchased from us here

Once you renew the products before expiration date you get:

  • a new year is added to your account ( starting from the date the product will expire )
  • during this time you are notified by e-mail about the latest changes of the products you subscribed for
  • your subscription provides all product releases, updates (major and minor) and access to all betas in active development, while your subscription is active

In case you are registered for eXSuite package:

  • you will receive the development license keys for the new products that has been included in the eXSuite package.

All of our controls are royalty-free and run-time license-fee free. 

Our subscription is expired. How can I proceed to renew?

You are entitled to get the the latest released version ( not including the source code, unless you do not have a subscription for it ), free of charge, for 1 Year from the purchase date. Our development team is committed to keeping in step with new technology, and Exontrol' subscription service is a convenient way to ensure your developers are always using the latest versions of our products.  

 If your subscription is expired, you can renew the products you purchased from us here

Once you renew the products after expiration you get:

  • your subscription starts once we receive your renewal order ( placed and paid )
  • during this time you are notified by e-mail about the latest changes of the products you subscribed for
  • your subscription provides product releases, updates (major and minor) while your subscription is active

In case you are registered for eXSuite package:

  • you will receive the development license keys for the new products that has been included in the eXSuite package.

All of our controls are royalty-free and run-time license-fee free.

I am registered user of the eXSuite package but there are a number of missing components, for which I have a development license key for. How can I get them?

The most probably you are registered user of eXSuite/COM UNICODE package. The eXSuite/COM UNICODE package contains only components that supports UNICODE, so components like eXDialog, eXDictClient, eXEMail, eXLookupNS, eXNNTP, eXResizer, eXSkin are not included in the package, because they are not UNICODE aware. In order to get the latest version of any of these components, you have to request them one by one in the update page.

I am registered user of the eXSuite package, but seems that the version of the component in the package differs the one that you list on the web site?

The eXSuite package, in all configurations, /COM, /NET, /WPF, 32-bit, 64-bit ANSI or UNICODE has more than 4GB. The eXSuite package is updated/uploaded once a month ( usually at the beginning of the month ), while individual components are updated/uploaded every week.

I am registered user of the eXSuite package, but I am missing development license keys for the new products. How can I get them?

If you are registered for eXSuite package, you are entitled to get the the latest released version ( not including the source code, unless you do not have a subscription for it ), free of charge, for 1 Year from the purchase date for each individual product you are registered for. You are registered for an individual product/component while you have a development license key for that product. New released products are not part of your eXSuite maintenance.

Once you renew your maintenance for the eXSuite, you will receive the development license keys for the new products that has been included in the eXSuite package.

On the update page, you can find all new products that has been included in the eXSuite package at the (*) point as listed:

(*) The following new products has been included to the eXSuite package:

If you are a registered user of the eXSuite, you will get these new products, as soon as you renew your maintenance for the eXSuite package, starting from listed date

The "What's new" in the control's web page, lists the changes of the product, including the date when it was initially released.

Can I use the /COM version without registering on the client machine?

Yes. The concept of Isolated COM solves the problem, so you have to be familiar with. In other words, it means you can use the /COM version, and your application can use only the DLL you provide, without being affected by any other application that could install a newer or older version of the component. 

Developers are encouraged to design isolated applications and to update existing applications into isolated applications for the following reasons:

  • Isolated applications are more stable and reliably updated because they are unaffected by the installation, removal, or upgrading of other applications on the system. 
  • Isolated applications can be designed so that they always run using the same assembly versions with which they were built and tested. 
  • Isolated applications can use functionality provided by the side-by-side assemblies made available by Microsoft. For more information, see Supported Microsoft Side-by-side Assemblies. 
  • Isolated applications are not tied to the shipping schedule of their side-by-side assemblies because applications and administrators can update the configuration after deployment without having to reinstall the application. This would not apply in the case where only one version of the assembly is being made available. 
  • A fully isolated application may be installed by using the xcopy command. Windows Installer can also be used to install an isolated application without impact to the registry. For more information, see Installation of Win32 Assemblies.

Shortly, the Isolated COM allows your application to use ActiveX components without having to register them.

Currently, we have the following samples that uses exg2antt/com as isolated ( Registration-less COM Activation ): 

Can I use one of your controls if I haven't worked with ATL before?

The answer is definitely yes. For instance, if you know some VB and you have some knowledge about ActiveX programming, it is enough to know how to use any of our components. If you know C++, you need to know how to insert an ActiveX control, and how to add a member of ActiveX type.  

Now, few words about why we are using ATL. ATL is the ActiveX Template Library, a set of template-based C++ classes with which we can easily create small, fast Component Object Model (COM) objects. ATL gives several important features like:

  • All of the power of C++.
  • No run-time library
  • A relatively high-level way of abstracting objects and interfaces.
  • Automatic handling of class factory, object creation, reference counting, and QueryInterface.
  • Stock implementations of standard interfaces

ATL is the Active Template Library, a set of template-based C++ classes with which you can easily create small, fast Component Object Model (COM) objects.

Are your controls built from scratch, or do you simply wrap Microsoft objects somehow in your own wrapper?

Yes. All of our components/products ( excepts eXMaskEdit ) are written from scratch. Our components do NOT wrap or subclass  any Microsoft objects or windows such as ListBox, SysTreeView32, SysTabControl32, and so on.

Can you confirm that your components have no external dependencies?

Yes. We definitely can confirm this. The controls are written from scratch, which means that there is NO dependency to third runtime libraries such as MFC, VB, Delphi or anything else. We provide independent components, so no matter of what programming language you are using for your application, our component requires the dll files only, nothing else, on a Windows system

The Dependency Walker tool from Microsoft which is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. For each module found, it lists all the functions that are exported by that module, and which of those functions are actually being called by other modules. Another view displays the minimum set of required files, along with detailed information about each file including a full path to the file, base address, version numbers, machine type, debug information, and more.

Let's take the Exontrol's eXG2antt/COM component and scan it using the Dependency Walker, and we get the following:

exg2antt dependencies

The required files are only system files. Those files are installed on any Windows system, else the system is not working at all and you need a format :). So, in conclusion the components have no external dependencies, so the component works on any client machine without having to install all kind of libraries and stuff.

If we give a shot to another gantt component from competition you can find:

vcgantt dependencies

So, there are a lot of required files, and on an clear system, the component can not be loaded so can not be used, without those required files. Usually, the more dependencies the more problem on the client machine with versioning.

The decision is yours.

Is your product able run either on a win98, winme, win nt 4, win 2000, win XP, Vista, Windows 7 platform?

Yes. Any of our products run just fine on all Windows systems.

Can your component be used in VBA ( Excel, Word, ... )?

All components except exTab component can be used in a VBA environment like Excel, Word and so on.  The exTab component requires a container that implements ISimpleFrameSite interface. Unfortunately, the VBA environment doesn't support ISimpleFrameSite interface.

What are the differences between retail and site version?

This is applicable only to COM objects. 

A Site license provides an easy, cost effective way to give all of your developers access to the component.  A Site is defined as all computers owned by an individual company at one physical mailing address. The site version of the control is not requiring the IClassFactory2 interface. What that means? It means that you can create or use the control in runtime mode as well in design mode on a client machine. The retail version doesn't allow using the control in design mode on the client machine. The site license allows unlimited developers to use on the development machine, in the same company. The site version encrypts information about the registered owner, in the distributable file. The retail version is recommended for single developers. The team version is recommended for the companies that have less than 8 developers. The site version is recommended for companies that has more than 8 developers, or for companies that develop container applications that require design mode running on the client machine.

How do I uninstall the component from my machine?

Locate the file "uninstall.exlog" in the folder where you have installed the component. By default the control's path is: "C:\Program Files\Exontrol\ControlName". Once that you have found the file you have to run the install program again using this file as argument, or you can associate for "exlog" files the install program, and then dblclk on your Windows Explorer. 

We are using our own installer called: "Exontrol Installer/Uninstaller Tool", formerly "Exontrol ExInstall Setup Generator". Our installer just copies samples, documentation and the control's dll to your machine. The "uninstall.exlog" file contains the list of files/folders being copied/created on your machine.

info If your intention is installing a NEWER version, you should know that uninstalling the previously version is NOT required. Shortly, simple re-run the new setup and it will install the new component including new properties, methods, events, samples, documentation by overriding the older version ( if it exists ). Before installing you should only close any application or project that uses the component you want to re-install or an error message will be displayed like in the following screen shot:

Just click the Retry button, after you closed all projects or applications that may use the component you want to reinstall. This can be the most common error, you can encounter during reinstallation.

Is it possible to install the components from a batch file, so no user interface is shown (/silent install)? 

Currently, the valid options for installers is:
  • /silent option performs the installation of the product without usage of UI. For instance, running the 'print.net.exe /silent' installs the eXPrint/NET component without showing the default user interface. You can create your own batchfile to install components one by one, without having to click the Install button for any of them. The /silent option is valid for exontrol installers from version: 6.1.0.1 ( Locate the installer in the windows explorer, and hover the mouse on the exe file so the version of the installer will be located on 'File version:' field ). The installer can be recognized as "Exontrol ExInstall Setup Generator" on field 'File description:'. 

The eXSuite package provides batch files like: "_silent_install_all_.bat" or "_silent_update_all_.bat", that helps you to silent install all the components.

The first argument or option that does not start with the / character indicates the path to the exlog file. The exlog file is used for uninstalling the component. For instance, the command 'print.exe "C:\Program Files\Exontrol\ExPrint\uninstall.exlog"' will unistall the eXPrint/COM component. Locate the file "uninstall.exlog" in the folder where you have installed the component. By default the control's path is: "C:\Program Files\Exontrol\ControlName". Once that you have found the file you have to run the install program again using this file as argument, or you can associate for "exlog" files the install program, and then dblclk on your Windows Explorer.

You M U S T use the development installer only on the development machine. You M U S T not use the registered installer on the client machine. Please check the What files do I need to install on the client machine? to install the component and your application on the client machine.

Vista, DEP (Data Execution Prevention) and AccessViolationException or Attempted to read or write protected memory.

Currently most of our UI components as eXTree, eXEdit, eXG2antt, eXGantt, eXGrid, eXList, eXComboBox, eXOrgChart, eXCalendar, eXPlorerBar, eXListBar, eXPlorerTree components and so on are DEP compatible

Named NX by AMD, DEP by Microsoft, and XD by Intel, this technology requires CPU support that helps prevent code from executing in data segments. Most modern Intel CPUs support this capability today and all current AMD CPUs support NX. DEP support was first introduced in Windows XP SP2 and is a critically important defense in Windows Vista. 

Data Execution Prevention may accidentally shut down legitimate process from valid applications or services, particularly third-party installers used by software developers that release their products for download through the Web. To make thing worse, DEP normally does not or fails to display or show any warning or information or acknowledgment message prompt that can let you know that DEP has shut down a process, thus causing you unaware of the reason why your setup file cannot run, or why your computer cannot start a service and etc.

Verify the DEP setting in your Windows Vista:

1. Click Start
2. Click All Programs
3. Click Accessories
4. Right Click on Command Prompt
5. Left click on Run as Administrator
6. Click the Allow button if it asks you for permission
7. Type or copy and paste this into the command prompt window:

bcdedit.exe

8. Hit enter and the output displays the status of your DEP in Windows Bool Loader named nx. For instance: nx Always On

Disable DEP in Windows Vista:

1. Click Start
2. Click All Programs
3. Click Accessories
4. Right Click on Command Prompt
5. Left click on Run as Administrator
6. Click the Allow button if it asks you for permission
7. Type or copy and paste this into the command prompt window:

bcdedit.exe /set {current} nx AlwaysOff

8. Hit enter and you should see the confirmation: Operation Completed Successfully
9. Reboot and DEP should be off.

Enable DEP in Windows Vista:

1. Click Start
2. Click All Programs
3. Click Accessories
4. Right Click on Command Prompt
5. Left click on Run as Administrator
6. Click the Allow button if it asks you for permission
7. Type or copy and paste this into the command prompt window:

bcdedit.exe /set {current} nx AlwaysOn

8. Hit enter and you should see the confirmation: Operation Completed Successfully
9. Reboot and DEP should be on.

I have installed the trial version of eXTree/COM, eXEdit/COM, but it gets "You must have a license to use this ActiveX control." or "Class is not licensed for use" while trying to place it to a form. What is the problem?

I have installed the trial version of eXTree/COM, eXEdit/COM, but I am still not able to place the control to a form/dialog as it gets:
  • Microsoft Visual Basic, License information for this component not found. You do not have an appropriate license to use this functionality in the design environment.
  • Microsoft Visual C++, The Active X control cannot be instantiated.
  • Microsoft Visual C++, The ActiveX control could not be instantiated because it requires a design-time license.
  • Microsoft Visual Studio, Failed to create component 'AxHost'. The error message follows: 'System.ComponentModel.LicenseException: You must have a license to use this ActiveX control.
  • Microsoft Visual FoxPro, OLE error code: 0x80040112: Class is not licensed for use

In order to avoid this problem run regsvr32 /u extree.dll or regsvr32 /u exedit.dll before installing, or in other words uninstall any previous version of eXTree / eXEdit controls. This could happen if you previously installed another component from us, that installs the eXHelper tool, that uses and installs the eXTree and eXEdit registered versions.

I tried to install separately the exHelper tool, but it says that the it requires newer version for eXEdit/COM, eXTree/COM. What can be done?

In order to avoid this problem run regsvr32 /u extree.dll AND regsvr32 /u exedit.dll before installing the exhelper tool, or in other words uninstall any previous version of eXTree / eXEdit controls. This could happen if you previously installed another component from us.

I have purchased the registered version but my application still show "This message doesn’t appear in the registered version". What can be wrong?

This is happen because the control's DLL on the PC is still an evaluation version. 

You should do the following:

  • If this happen on your development machine, you need to re-install the setup you have received when you purchased the component.

  • If this is happen on the client machine, copy the dll from Your development machine, on the client machine. Please check the "What files do I need to install on the client machine?", that shows the steps you need to follow in order to include the component on your setup.   

Please pay attention to:

  • Any evaluation setup can NOT be converted to a registered version. In other words, an evaluation DLL is impossible to be converted to a registered DLL.

  • Installing any version, OVERRIDES the previous version. For instance, if you have installed your development setup, and after you install the evaluation, it overrides the registered version.

DLL/Assembly Name Convention

A dynamic link library (DLL) is a collection of small programs, any of which can be called when needed by a larger program that is running in the computer. An assembly is the unit of deployment and identity for managed code programs. Although assemblies can span one or more files, typically an assembly maps one-to-one with a DLL.

Exontrols' dll name convention is:

/COM/ActiveX/OCX

  • The ActiveX/COM component is implemented in DLLs such as ex<control>.dll, where the <control> is the name of the component. For instance: exgrid.dll, exgantt.dll, exg2antt.dll, and so on. A new version of the ActiveX/COM component does not change the name of the DLL, instead the Version property returns the version of the file/component you are running.

/NET Assemblies

  • /NET component is implemented in DLLs such as exontrol.ex<control>.dll, where the <control> is the name of the component. For instance: exontrol.exgrid.dll, exontrol.exgantt.dll, exontrol.exg2antt.dll, and so on. A new version of the /NET component does not change the name of the DLL, instead the Version property returns the version of the file/component you are running.

/WPF Assemblies

  • /WPF component is implemented in DLLs such as wpf.exontrol.ex<control>.dll, where the <control> is the name of the component. For instance: wpf.exontrol.exgrid.dll, wpf.exontrol.exgantt.dll, wpf.exontrol.exg2antt.dll, and so on. A new version of the /WPF component does not change the name of the DLL, instead the Version property returns the version of the file/component you are running.

Trojan: Win32/Fathale.B!plock

Unfortunately, you may encounter Win32/Fathale.B!plock false-threat with one of our installers, while you download or right-after you installed the component/product, but Fortunately, it is a false-alarm. We hope that Microsoft's Defender Team will solve this problem as soon as possible. 

In order to prevent this, you can 

  • use MSI Installer

Download and install the /MSI configuration that installs the same product, using the Microsoft's Setup Installer, rather than using our installer. 

For instance, if you are looking for eXG2antt control, please go here:

http://exontrol.com/dld.jsp?product=eXG2antt

and Choose 4 ( MSI : This installs the ActiveX and .NET Assembly on your machine, as MSI ( Windows Installer File ). The MSI setup comes with samples, documentation for both versions ).

  • use eXInstaller Online

Download and Run the ExInstaller, and get online the same product, from the Available Online List. The ExInstaller is a software component and application programming interface (API) for Microsoft Windows OS used for the installation, maintenance, and removal of our software.

We believe / suppose that the real-threat Win32/Fathale.B!plock is a pain, but not like all detected items are indeed a true-threat, so as far of our installer, we are 100% sure that's clean and safe, because:

  • the installer computes and displays in the lower-right corner a checksum, that's mostly impossible to cheat ( like shown bellow ). The checksum may be different from a version to another, from a component to another, and so on. The checksum it's an a + b + c equation, but you do not know where a, b or c is from, and how many a, b, c variables the equation has indeed...
  • we wrote the installer from scratch using Microsoft Visual Studio C++, as a standalone piece
  • we are not using any third-party libraries

(64-bit) I have installed the MSI file on my x64 system, and I got "Unable to load DLL : The specified module could not be found. (Exception from HRESULT: 0x8007007E)". What can be done?

Changes the solution platform from "Any CPU" to "x86". This is required, because the MSI installer installs the 32-bits version of the component. Click the "Configuration Manager", click "<New...>" from "Active solution platform" field, and select "x86" platform. Letting "Any CPU" on a 64-bits machine, builds a x64 application, which requires 64-bits version of the components. If you have installed the x64 version of the component, the application will run, else the exception "Unable to load DLL : The specified module could not be found. (Exception from HRESULT: 0x8007007E)" occurs. 

If you plan to deploy your application for 64-bits platforms, you need to install both versions of the component: 32 and 64-bits versions.

The 32-bit version is for 32-bit applications. The 32-bit applications can run on a 64-bit Windows operating system under WOW64. The 64-bit version is for 64-bit applications only, and the x64 application can use only 64-bit version of the component.

(64-bit) I get the "Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))" when running the form with your /COM/ActiveX control?

On Windows 64-bit edition, the most probably is that you are running the form that contains a 32-bit edition of the component, while the project's configuration is Any CPU

A). Install the 64-bit version of the component, and run the form again. The devenv is a 32-bit process, there is no devenv on 64-bit, so when you are running the form in design mode, the devenv sees the 32-bit edition of the component. Once you build and run the project ( for 64-bit or Any CPU on Windows 64 ), the 64-bit process sees only the 64-bit edition of the component, not the 32-bit edition, so the IDE gives the error as "Class not registered".

B) Change the project's configuration to x86 platform and run the form again. In this case, you are running the built project as 32-bit, so the component is visible at runtime. If your intention is porting your application on 64-bit, you need to install both 32 and 64-bit editions of the component on the development machine. The 32-bit is required for development in devenv 32-bit, while the 64-bit edition is required only for running the project in 64-bit. Your installer should include only the 64-bit edition the client machine.

By default, the 32-bit edition of the component goes to \windows\SysWOW64, while the 64-bit edition of the component goes to \windows\system32. The \Windows\SysWOW64 directory is where 32-bit system files are installed. 64-bit system files are in the \Windows\system32 directory for compatibility reasons. The samples of the component under 32-bit go to \Program Files(x86) directory, while the samples of the 64-bit edition go to \Program Files. Windows x64 Edition redirects the \Program Files directory for all programs that are 32-bit during the installation to the \Program Files(x86) directory. Programs that 64-bit are installed into the \Program Files directory.

(64-bit) I get "Unable to load DLL : The specified module could not be found. (Exception from HRESULT: 0x8007007E)" when trying to run your samples of /NET Assembly component?

On Windows 64-bit edition, the most probably is that you are running the form that contains a 32-bit edition of the component, while the project's configuration is Any CPU.

A). Install the 64-bit version of the component, and run the form again. The devenv is a 32-bit process, there is no devenv on 64-bit, so when you are running the form in design mode, the devenv sees the 32-bit edition of the component. Once you build and run the project ( for 64-bit or Any CPU on Windows 64 ), the 64-bit process sees only the 64-bit edition of the component, not the 32-bit edition, so the IDE gives the error as "Unable to load DLL".

B) Change the project's configuration to x86 platform and run the form again. In this case, you are running the built project as 32-bit, so the component is visible at runtime. If your intention is porting your application on 64-bit, you need to install both 32 and 64-bit editions of the component on the development machine. The 32-bit is required for development in devenv 32-bit, while the 64-bit edition is required only for running the project in 64-bit. Your 64-bit installer should include only the 64-bit edition the client machine.

By default, the 32-bit edition of the component goes to \windows\SysWOW64, while the 64-bit edition of the component goes to \windows\system32. The \Windows\SysWOW64 directory is where 32-bit system files are installed. 64-bit system files are in the \Windows\system32 directory for compatibility reasons. The samples of the component under 32-bit go to \Program Files(x86) directory, while the samples of the 64-bit edition go to \Program Files. Windows x64 Edition redirects the \Program Files directory for all programs that are 32-bit during the installation to the \Program Files(x86) directory. Programs that 64-bit are installed into the \Program Files directory.

(64-bit) I get "System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)". What should i do?

A). Install the 64-bit edition of the component also. The devenv is a 32-bit process, there is no devenv on 64-bit, so when you are running the form in design mode, the devenv sees the 32-bit edition of the component. Once you build and run the project ( for 64-bit or Any CPU on Windows 64 ), the 64-bit process sees only the 64-bit edition of the component, not the 32-bit edition, so the IDE gives the error as "System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)".

B) Change the project's configuration to x86 platform and run the form again. In this case, you are running the built project as 32-bit, so the component is visible at runtime. If your intention is porting your application on 64-bit, you need to install both 32 and 64-bit editions of the component on the development machine. The 32-bit is required for development in devenv 32-bit, while the 64-bit edition is required only for running the project in 64-bit. Your 64-bit installer should include only the 64-bit edition files on the client machine.

If your intention is porting your application on 64-bit, you need to install both 32 and 64-bit editions of the component on the development machine. The 32-bit is required for development in devenv 32-bit, while the 64-bit edition is required only for running the project in 64-bit. Your installer should include only the 64-bit edition the client machine.

(64-bit) I get "cannot find file" for /NET or /WPF / "Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))" for /COM. What can I do?

The most probably you have installed the 32-bit component on a Windows 64-bit system. 

There are 2 options to fix this problem:

A). Changes the solution platform from "Any CPU" to "x86", so your application is 32-bits.

B). Installs both versions of the component: 32-bit and the 64-bit version. This is valid for /COM, /NET or /WPF setup. Even if you are running a Windows 64-bit system, the 32-bit version of the component is not visible for 64-bits applications as it can gives: Class not registered or "Cannot find file .net". 

You need to install both setups (32 and 64-bits of the component) on the Windows 64-bit system:

  • For programming you may still need the 32-bit version. For instance, Visual Studio 2010 is a 32-bit application and when installed on a 64-bit Windows operating system will run under WOW64 
  • The 64-bit version is for 64-bit applications only

In conclusion:

  • you require 64-bit version of the component, if your application is 64-bit. If your project is set to Any CPU and running on Windows 64-bit, the application is actually a 64-bit, so it requires the 64-bit version of the component. 
  • you require 32-bit version of the component, if your application is 32-bit. The 32-bit applications can run on a 64-bit Windows operating system under WOW64. If your project is set to Any CPU and running on Windows 64-bit, the application is actually a 64-bit, so it requires the 64-bit version of the component. If the project's platform is set on x86, the 64-bit version is not required.  

(64-bit) All your samples work, but I can not insert the component to my project as it is not listed in COM Components page of the IDE (toolbox items)?

On Windows 64-bit edition, the most probably is that you have installed the 64-bit edition of the component, while the VS IDE requires the 32-bit edition. The devenv is a 32-bit process, there is no devenv on 64-bit, so when you are running the form in design mode, the devenv sees the 32-bit edition of the component. 

A) Install the 32-bit edition of the component, and you will be able to insert the component on the form. 

If your intention is porting your application on 64-bit, you need to install both 32 and 64-bit editions of the component on the development machine. The 32-bit is required for development in devenv 32-bit, while the 64-bit edition is required only for running the project in 64-bit. Your installer should include only the 64-bit edition the client machine.

(64-bit) How can I verify that the process is running on 32 or 64-bit?

Open the Task manager. If the process name ends with *32 it means that the process is 32-bit, else the process is running on 64-bit.

(64-bit) How can I ensure that a dll is a 32 or 64-bit image?

Use the depends tool (Dependency Walker) to load the library. Dependency Walker is part of several Microsoft products, such as Visual Studio, Visual C++, Visual Basic, Windows 2000/XP/2003 support tools (on the Windows CD), Windows 98/NT/2000/XP/2003 Resource Kits, Platform SDK, Windows DDK, Windows SDK, and MSDN. There are also several places on the Microsoft web site that it can be downloaded from for free. The depends will give you all information about the loaded library, including third library that the library requires If we are speaking of our components, you must know that there is no third library as mfc, vb, or any runtime library is required, as they are built from scratch. Only system libraries are required. Anyway without them, there is no system.

By default, the 32-bit edition of the component goes to \windows\SysWOW64, while the 64-bit edition of the component goes to \windows\system32. The \Windows\SysWOW64 directory is where 32-bit system files are installed. 64-bit system files are in the \Windows\system32 directory for compatibility reasons. The samples of the component under 32-bit go to \Program Files(x86) directory, while the samples of the 64-bit edition go to \Program Files. Windows x64 Edition redirects the \Program Files directory for all programs that are 32-bit during the installation to the \Program Files(x86) directory. Programs that 64-bit are installed into the \Program Files directory.

(64-bit) Does your control works on Windows 64-bit?

Yes, the control works on Windows 64-bit as follows:
  • The 32-bit version of the component can work with 32-bit application only, on Windows 32-bit or Windows 64-bit, under WOW64.
  • The 64-bit version of the component can work with 64-bit application only, on Windows 64-bit.

We provide 32-bit and 64-bit configurations for almost of our components. In conclusion, you require the 32 or/and 64-bit version of the component based on the type of your application. For instance, if you plan to have only 32-bit application, you need only the 32-bit version of the component, you do not need the 64-bit version of the component. If your application is for 64-bit, you require the 64-bit version of the component too. For programming you may still need the 32-bit version. For instance, Visual Studio 2010 is a 32-bit application and when installed on a 64-bit Windows operating system will run under WOW64.

(64-bit) Do we need to take separate licenses of the control for 32-bit and 64-bit?

We provide 32-bit and 64-bit configurations for almost of our components. In conclusion, you require the 32 or/and 64-bit version of the component based on the type of your application. 

For Development:

  • if you plan to have only 32-bit application, you need only the 32-bit version of the component, you do not need the 64-bit version of the component. 
  • if your application is for 64-bit, you require the 64-bit version of the component too. For programming you may still need the 32-bit version. For instance, Visual Studio 2010 is a 32-bit application and when installed on a 64-bit Windows operating system will run under WOW64.

For Distribution:

  • if you plan to distribute your application on Windows 32-bit only, you need only the 32-bit version of the component
  • if you plan to distribute your application on Windows 64-bit only, you need only the 64-bit version of the component
  • if you plan to distribute your application on Windows 32/64-bit you need the both or choose the /ANY configuration.

This is applicable to /COM, /NET or /WPF components. 

Should I use 32-bit or 64-bit version of the control?

We provide 32-bit and 64-bit configurations for almost of our components.

The type of the configuration you need is based on your configuration/type of your application as follow: 

  • 32- bit application, requires 32-bit version of the control. This will work on x64 machines as well.
  • 64- bit application, requires 64-bit version of the control. This will not work on x32 machines.

For instance, 

  • Let's say you are using Access on a 32-bit machine, you need 32-bit version of the /COM component. Now, if you run your database on a Access x64, you need the 64-bit version of the component. In case you are using the Access x32 on a Windows x64 machine, you need the 32-bit version of the /COM component.
  • Let's say you are developing your application on /NET Framework. If you plan to distribute your application on any Windows 32/64-bit, you need the /ANY or both 32 and 64-bit version of the /NET component. If you plan to distribute your application as x86 ( 32-bit version ), you need only the 32 version of the /NET component. If you plan to distribute your application as x64 ( 64-bit version ), you need only the 64 version of the /NET component. Please check also: I get "cannot find file" for /NET or /WPF / "Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))" for /COM. What can I do?

In conclusion, you need the 32-bit or/and 64-bit configurations based on the type/configuration of the application/machine you are running your application.

Please check also: Do we need to take separate licenses of the control for 32-bit and 64-bit?

This is applicable to /COM, /NET or /WPF components. 

I am using the OLE View tool on a client machine and I get the error: $80040112, when I am trying to see your control? 

This is applicable only to COM objects. 

The OLE View tool helps users to check the control's type library. In order to get the control's type library the OLE View tool is trying to create the control. The OLE View uses the DllGetClassObject method and IClassFactory interface to create the control. Since the control is a licensed ActiveX control, the IClassFactory2 interface is required, not the IClassFactory interface. The IClassFactory interface is not able to handle licensed ActiveX controls, that's why the error occurs. Once again you can use the OLE View tool on the development machine with no problems. The single way to check if the control is properly registered on a client machine is if the DllRegisterServer returns S_OK, or in other words, the regsvr32 returns no errors. The Site Wide License of the component doesn't use the IClassFactory2 interface.

When I try to insert an Exontrol library to my VB project, I get "Permission Denied"?

This is applicable only to COM objects. 

Usually it is happen when the logged user has no access to OLE registry key. For every custom control file (.OCX) that Visual Basic uses, there is an accompanying .OCA file of the same file name. An .OCA file is a binary file that functions as both an extended type library file and a cache for the custom control file. When you are trying to insert an ActiveX control to your VB project using project components dialog, the VB tries to access the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Basic\6.0 registry key where it saves the path to OCA file by creating a new key using the program identifier for the control's type library. Since, you don't have access to that key, that's the reason why you cannot insert the component to the VB. In order to make sure that you have access to that key open the registry editor and tries to create a new key to the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Basic\6.0 key. Another key used by the VB is HKEY_CLASSES_ROOT\TypeLib, so make sure that the user has access there also. On 32-bit Microsoft Windows systems, a user must have the correct permissions for access to the system registry. Change your permissions or have them changed by the system administrator.

I have installed the Exontrol product, but I am not able to see the product into Project\Components dialog?

This is applicable only to COM objects. 

That means that the setup copies the files but it wasn't able to register the component(s). In order to make sure that the component is registered go to your system folder, and run the regsvr32 , and make sure that the registration process was successfully. When you are installing an Exontrol product make sure that you have permission to write to OLE registry, and you have write-access to disk. We recommend installing the software using Administrator accounts.

I have installed the product, but the sample folder is empty or missing?

This is applicable only to ALL components. 

Usually, the samples of the component goes to: C:\Program Files\Exontrol\COMPONENT\Sample, where component is the name of the product like: ExG2antt, ExG2antt.NET, ExG2antt.WPF, and so on. 

If this folder is missing or empty one of the following could happen:

  • you installed the registered version, which comes with only required stuff.
  • you installed the product with SAMPLE Pack unchecked.

If this is happen, you should:

  • download and install again the trial version from the website.
  • make sure that the SAMPLE Pack is checked on the setup.
  • if you are a registered user, re-install the registered setup. This will NOT remove the samples or the documentation of the control, so only required files of registered product are installed.

I have installed a trial/demo product, but I am not able to run any of the installed samples?

This is applicable only to COM objects. 

Any of Exontrol setups install and register one or more ActiveX controls. Registration of an ActiveX control requires write permission to the HKEY_CLASSES_ROOT OLE registry key. This is a general rule, and it is not an Exontrol rule. Make sure that you install the Exontrol software using an Administrator account.

Can we use ActiveX controls to build applications under .NET?

This is applicable only to COM objects. 
 
For instance, the System.Windows.Forms.ListBox component uses the "LISTBOX" window. As you already know sending the LB_ADDSTRING message to a listbox window adds a new item. Here's a simple sample that can be used in c#. All that you need to do before copying the code is to create a new c# application, and to insert a listbox component to the main form.
[DllImport("User32.DLL")]
public static extern long SendMessage( int hWnd, int Msg, int wParam, string lParam );

private void Form1_Load(object sender, System.EventArgs e)
{
    SendMessage( listBox1.Handle.ToInt32(), 0x0180 /*LB_ADDSTRING*/, 0, "test");
}
Obviously, if you call listBox1.Items.Add("test") the last thing that listbox does is to call SendMessage function. The things are the same for ListView, TreeView, ComboBox components, and so on. In your .NET application, all these mean that you are safe to use an ActiveX control. Using the ActiveX version will be faster than using the same version built using c#.

Documentation

I am not able to find any help file for the component. What can I do?

By default, the setup installs a chm file into your system folder. You can open the control's documentation by typing the control's name followed by .chm in the Run dialog box of your windows. For instance, click Start button, then Run... and type exg2antt.chm The eXG2antt's documentation is shown. Also, you can access the help file by pressing F1 key when in VB and the control is selected in design mode.

I can't open the CHM file, as it gets "Action Canceled", "Navigation to the webpage was canceled". What can I do? 

This is mostly related to Windows security and happen when the CHM file is copied from the internet or from one computer to another.

After opening a CHM documentation file, a topic may not appear when you click a link from the Table of Contents. In order to prevent this, do the following:

  • locate the CHM file in your Windows Explorer
  • right click the file, and open the Properties page
  • click the Unblock button, where it should say something as: This file came from another computer and might be locked to help protect this computer.
  • click the Apply button, and then click OK

Once the security message is not showing anymore, you can open the CHM file.

Is there any FAQ list related to a product?

Yes. Please load the component's main page, and click the FAQ hyperlink. For instance, here's the exGrid's FAQ page, exEdit's FAQ page, and so on.

I've enjoyed your online presentation and I need some info about X-Script language. 

The X-Script language was designed and implemented by us as lite as possible ( no dependencies ) to let users play the component into a web browser ( or any ActiveX container ). The X-Script language is simple but powerful. Shortly, you can call object methods, you can assign a value to a property, you can get the value of a property into a variable. The most important thing, is that if a property or method gets a new object, by using the { }( context brackets ) you can call the properties or methods for the returned object. Please check also the How can I use the control's Template page? entry.

I'm not able to see the online presentation. 

The most probably thing is that you have installed a service pack for your Internet Explorer browser. The problem is that your web browser disables the ActiveX Inline Data Streaming Functionality described here. ( Microsoft Knowledge Base Article - 317599 ). There is only a value that should be added to your registry. The name of the key is EnableInlineData. You can download and import the registry file here. If you still want to do it manually here's what you need:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility]
"EnableInlineData"=dword:00000001

Licensing, Deploying and Distribution

What files do I need to install on the client machine?

By default, any retail, team, site or source version of the control installs on your development machine, the DLL that should be redistributed with your application as described bellow. For instance, if you have installed the eXGrid/COM, then the required DLL is exgrid.dll could be located in your system folder, since if you have installed the eXGrid/NET assembly, the required DLL is exontrol.exgrid.dll which goes to the folder where the component and samples has been installed. Shortly, the /COM require just registration on the client machine unless you are not using it on an Isolated Application, while the /NET assembly requires just copying it to the same folder where the EXE application is.

!!! The development setup you have received when purchased any of our components must be used ONLY on your development machine, NEVER on the client's machine.

This is applicable only to COM objects (excepts eXNETHost).

Your package must copy and register the DLL on the client machine, using the regsvr32 tool. You must include all required DLLs. For instance, if you are using the Print and Print Preview for the eXGrid, the eXPrint's DLL must be included in the package as well. Nothing else is required. You can use any deployment tool ( as VS 2005 ) to build your package including all dependencies. The regsvr32 tool do register a COM object. If succeeded the "DllRegisterServer in .... succeeded." message is displayed. There are several alternatives to register a component but all of them do the exactly the same: The DLL is loaded using LoadLibrary method, the GetProcAddress is used to find the entry for DllRegisterServer function, and once that it is found, the DllRegisterServer function is called. If the function retrieves S_OK, the registration is ok.  For instance: regsvr32 exgrid.dll

For instance, if you are using the eXGrid/COM  and eXComboBox/COM components in your project, the required files are: exgrid.dll and excombobox.dll. In case your application includes Print and Print Preview feature using the eXPrint component, the exprint.dll file is required too. So, your setup must include the files exgrid.dll, excombobox.dll and exprint.dll. They need to be copied and registered on the client's machine. 

See also: 

This is applicable only to COM objects (eXNETHost).

Your package must copy and register the DLL on the client machine, using the regasm tool. The Assembly Registration Tool (regasm.exe) reads the metadata within an assembly and adds the necessary entries to the registry, which allows COM clients to create .NET Framework classes transparently. Once a class is registered, any COM client can use it as though the class were a COM class. The class is registered only once, when the assembly is installed. Instances of classes within the assembly cannot be created from COM until they are actually registered. For instance: regasm /codebase /register exontrol.NETHost.dll

See also: Where I can find the redistributable files ( dll, ocx, net, wpf files )?

This is applicable only to COM objects in Isolated Applications (require no registration).

Your package needs to copy the DLL, without registration, in the same folder where the EXE is installed. An Isolated COM does NOT require registrations, so you just need to copy the DLL in the same folder where the EXE is. An application is considered an isolated application if all of its components are side-by-side assemblies. A side-by-side assembly is a collection of resources—a group of DLLs, windows classes, COM servers, type libraries, or interfaces—available for an application to use at runtime. 

See also:

This is applicable only to /NET assemblies (require no registration). 

The /NET Assemblies does NOT require registration ( regsvr32 ). All you need to do is to copy the assembly files in the application folder or any other library path where they can be located by your application. You must read the redist.txt file for more information about files that need to be included in your package.

See also: Where I can find the redistributable files ( dll, ocx, net, wpf files )?

This is applicable only to /WPF components (require no registration). 

The /WPF Components does NOT require registration ( regsvr32 ). All you need to do is to copy the assembly files in the application folder or any other library path where they can be located by your application. You must read the redist.txt file for more information about files that need to be included in your package.

See also: Where I can find the redistributable files ( dll, ocx, net, wpf files )?

How to Generate Assembly Manifest File (Registration-Free)?

This is applicable to COM

An assembly manifest is an XML file that describes a side-by-side assembly. Assembly manifests describe the names and versions of side-by-side assemblies, files, and resources of the assembly, as well as the dependence of the assembly on other side-by-side assemblies. Isolated COM allows your application to use ActiveX components without having to register them. The original vision of this was to allow copy deployment of the application, but Isolated COM has many benefits. You can have a private copy of the DLL without worrying that another application will install an older or newer copy that breaks your application. Isolated COM also allows you to successfully install and run on non-Administrator accounts.

Run the Exontrol's eXHelper (10.1) tool, select the control/component, right-click the middle / template panel, select the "Generate Assembly Manifest" item which generates the assembly manifest you can use in your application to use the component/assembly as Isolated COM.

Here's a movie that shows you how to generate the assembly manifest file (Registration-Free), for different controls.

Where I can find the redistributable files ( dll, ocx, net, wpf files )?

This is applicable to COM, /NET or /WPF objects. 

Starting with the installer 9.8, the registered setup provides the REDIST node, that shows where the redistributable files are copied. By default, the redistributable files go to: %Program Files%\Exontrol\Redistributable folder. You can change the path of redistributable files, by right clicking the REDIST node. The following screen shot shows the REDIST node of the installer: 

See Also: Is it possible to install the components from a batch file, so no user interface is shown ( /silent install )?

COM, We didn't use OCX ( Object Linking and Embedding (OLE) ) extension because it could suggest that the product uses MFC (Microsoft Foundation Class Library). All of our products are implemented into DLL files. All of our products have NO dependencies to third party libraries like mfc42.dll, msvcrt.dll, vb, and so on. For instance, the eXG2antt control's file is ExG2antt.dll, not ExG2antt.ocx. If you like, you can rename the ExG2antt.dll to ExG2antt.ocx, do a regsvr32 on it, and now you have an OCX.

By default, the DLL, NET or WPF file goes to the system folder, unless you haven't change the CONTROL pack. The following screen shot shows the CONTROL node of the installer:

Is there a way to check if the component is already registered?

This is applicable only to COM objects.

The following samples shows how you can check if the specified component is installed. The IsAxInstalled function has two parameters. The szID parameter indicates the control's program identifier, while the szLicense parameter is the control's runtime license, as explained bellow.

The szID parameter indicates the control's program identifier. The object's program identifier is found on the control's help file. You can search for "object's program identifier" in the control's CHM file. The information is shown in the following format:

Tip The /COM object can be placed on a HTML page (with usage of the HTML object tag:  <object classid="clsid:...">)  using the class identifier: {101EE60F-7B07-48B0-A13A-F32BAE7DA165}. The object's program identifier is: "Exontrol.Grid". The /COM object module is: "ExGrid.dll"

The szLicense parameter indicates the control's runtime license key. This key is NOT your development license key. Please check the How do I find my runtime license key?, or you can contact us to request your runtime license key. If you run a runtime-less version such as a Site version, the szLicense parameter can be empty string. The runtime license key can not be shared. 

The following samples provides the IsAxInstalled function for different programming languages. For instance, you can check if the exontrol's eXG2antt is installed using a code like IsAxInstalled("Exontrol.G2antt",""). 

C++

BOOL IsAxInstalled( LPCTSTR szID, LPCTSTR szLicense )
{
	USES_CONVERSION;
	CLSID clsid = CLSID_NULL;
	HRESULT hResult = E_POINTER;
	CoInitialize( NULL );
	if (SUCCEEDED( hResult = CLSIDFromProgID( T2OLE(szID), &clsid ) ))
	{
		CComPtr<IDispatch> spAx;
		// Checks first if we can instanciate the control using IClassFactory interface.
		if ( FAILED( hResult = CoCreateInstance( clsid, NULL, CLSCTX_ALL, IID_IDispatch, reinterpret_cast<void**>(&spAx) ) ) )
			if ( szLicense != NULL && *szLicense != NULL )
			{
				// Checks first if we can instanciate the control using IClassFactory2 interface.
				spAx = NULL;
				CComPtr<IClassFactory2> pCF2;
				if (SUCCEEDED(CoGetClassObject(clsid, CLSCTX_ALL, NULL, IID_IClassFactory2, reinterpret_cast<void**>(&pCF2))))
					hResult = pCF2->CreateInstanceLic(NULL, NULL, IID_IDispatch, T2OLE(szLicense), reinterpret_cast<void**>(&spAx));
			}
		spAx = NULL;
	}
	CoUninitialize();
	return SUCCEEDED( hResult );
}

C#

public bool IsAxInstalled(string szID, string szLicense)
{
    try
    {
        AxInstall n = new AxInstall(szID);
        if (n != null)
        {
            System.Reflection.FieldInfo f = typeof(AxHost).GetField("licenseKey",
                                    System.Reflection.BindingFlags.NonPublic |
                                    System.Reflection.BindingFlags.Instance);
            f.SetValue(n, szLicense);
            Controls.Add(n);
            Controls.Remove(n);
            n = null;
            return true;

        }
    }
    catch (Exception e)
    {
    }
    finally
    {
    }
    return false;
}

where the AxInstall class definition is:

public class AxInstall : AxHost
{
    public AxInstall( string szID )
        : base(Type.GetTypeFromProgID(szID).GUID.ToString())
    {
    }
}

or if you are using site/runtime-less version, you can use the following code:

public bool IsAxInstalled(string szID, string szLicense)
{
    try
    {
        object o = null;
        o = Activator.CreateInstance(System.Type.GetTypeFromProgID(szID));
        if ( o != null )
            return true;
    }
    catch (Exception e)
    {
    }
    finally
    {
    }
    return false;
}

See also: 

VB6

Private Function IsAxInstalled(ByVal szID As String, ByVal szLicense As String) As Boolean
On Error GoTo fail
    If Not (Len(szLicense) = 0) Then
        Licenses.Add szID, szLicense
    End If
    Dim o As Object
    Set o = Controls.Add(szID, "oTest")
    Controls.Remove oTest
    IsAxInstalled = True
    Exit Function
fail:
    IsAxInstalled = False
End Function

Instead Controls.Add method can be replaced by CreateObject method. The VB6's CreateObject creates and returns a reference to a COM object.

VB/NET

Private Function IsAxInstalled(ByVal szID As String, ByVal szLicense As String) As Boolean
    Try
        Dim n As New AxInstall(szID)
        If Not (n Is Nothing) Then
            Dim f As System.Reflection.FieldInfo
            f = GetType(AxHost).GetField("licenseKey", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
            f.SetValue(n, szLicense)
            Controls.Add(n)
            Controls.Remove(n)
            IsAxInstalled = True
            Exit Function
        End If
    Catch e As Exception
    End Try
    IsAxInstalled = False
End Function

where the AxInstall class definition is:

Public Class AxInstall
    Inherits AxHost

    Public Sub New(ByVal szID As String)
        MyBase.New(Type.GetTypeFromProgID(szID).GUID.ToString())
    End Sub
End Class

or if you are using site/runtime-less version, you can use the following code:

Private Function IsAxInstalled(ByVal szID As String, ByVal szLicense As String) As Boolean
    On Error GoTo fail
    Dim o As Object = Nothing
    o = Activator.CreateInstance(System.Type.GetTypeFromProgID(szID))
    If Not (o Is Nothing) Then
        IsAxInstalled = True
        Exit Function
    End If
fail:
    IsAxInstalled = False
End Function

See also: 

I've just installed the registered version ( /NET Assembly ) after I purchased from you, and my mockup application does not show my data, as it did using the trial version. What's wrong?

You must set the RuntimeKey property as explained in the redist.txt file in the section: B> Runtime License Key. You can find your registered key in the e-mail you received initially when purchased the component as follows: Your runtime license key is "...". Please read the redist.txt file for more information about using your runtime license key.

I get an "Invalid License Key" error when I use the key from my registration email. What am I doing wrong?

Usually it is happen when using the license key from another products, or when using the runtime license key instead your development license key. The development key can be found on your registration email in xxxx-xxxx-xxxx-xxxx format. The development license key is always generated based on your registration details at purchasing time. The development license key and runtime license key are different and can not be used one with another. The development license key is only required when you install the product on your development license key. The runtime license key is required when inserting components at runtime ( by code ), or when running /NET Assemblies.

What's the policy on upgrades and updates to the registered controls. Are all new versions supplied free or is there a charge for certain version number increases?

You are entitled to get the the latest released version ( not including the source code, unless you do not have a subscription for it ), free of charge, for 1 Year from the purchase date. You can find more details here.

May I use your controls to create controls of my own?

Our license allows you to distribute our controls only with your stand-alone applications.

The application works ok on the development machine, and doesn't work on the client machine. Is there anything I can do?

This is applicable only to COM objects. 

Shortly, this problem is ALWAYS related to the runtime license key that's missing on the client machine. When you purchased the component you received a development license key, that helps you to install the development setup on your machine. Let's call it the development machine. On the client machine, you need to copy and register the component. Never install the development setup, on the client machine, please check the license issue. The major difference between the client machine and the development machine is that on the client machine you will not be able to open the form that contains the component, in design mode. Now, why the runtime license key is missing on the client's machine, so I can't run my application? Often it is happen because you started the application using the demo version, and you didn't replace the old instances of the component like explained here, or you have created the control at runtime, without using runtime license key explained here.

On the development machine, please do the following :

  • insert the component to a form
  • add some code for testing purpose
  • save and build the executable

On the client machine, please do the following:

  • copy and register the component you are using
  • copy the executable file you built on the development machine
  • run the executable

Now, if you copied the whole project on the client machine, and you try to open some forms in design mode you will get errors like: 

  • "License information for this component not found."
  • "You do not have an appropriate license to use this functionality in the design environment."
  • "The ActiveX cannot be instantiated"
  • "Failed to create component 'AxHost'."
  • "OLE error code: 0x80040154: Class not registered."
  • "OLE error code: 0x80040112: Class is not licensed for use."
  • "The OLE server isn't registered"

and more.

If this is still not applicable for your case, please check also the "How can I create at runtime a licensed ActiveX control?"

How can I get the control dependencies?

The Microsoft Visual DevStudio setup installs in the C:\Program Files\Microsoft Visual Studio\Common\Tools ( C:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\Bin ) a tool called Dependency Walker ( depends.exe ). If you want to find the control dependencies you need to run the Dependency Walker tool, and to open the control's DLL The tool opens a new window where the control dependencies are displayed. 

Where in the installation process do I enter the license key?

Once that you have purchased an Exontrol product, you will receive a new setup that contains the retail, source, or site version for the product. You have to use the development license key only with version you received. You cannot use the development license key for demo/trieal setup file.

How do I build a CAB file?

This is applicable only to COM objects. 

The registered setup that you receive when you purchase a component, doesn't contain any CAB file. In order to build your own CAB file, you need to check the "Packaging ActiveX Controls" article. Shortly, a CAB file contains the components and a INI file that holds information about components. See Also: Using Exontrol components in Internet Explorer.

I received the CAxWnd class, and I need to know how to handle events? 

This is applicable only to COM objects. 

The CAxWnd class calls OnEvent callback function each time when hosted control fires an event. The OnEvent function carries the following arguments:

  • LPARAM lParam. An application extra data. The value of lParam is the same with the value passed to lParam when the CAxWnd::AxCreateControl function is called.
  • DISPID event. The event argument identifies the control's event identifier. Each event is represented by an unique identifier. You can use the OLE View tool to inspect the control's type library where you can find all events, their identifier and their definitions.
  • DISPPARAMS* pParameters. The pParameters argument carries information about the parameters of the event. 

For instance, let's say that we want to handle the MouseMove event of the exComboBox control. The definition for the MouseMove event in the control's type library is:

The id defines the event's identifier so, for MouseMove event the event's identifier is 0xfffffda2. Also, we can deduce that the number of arguments of the MouseMove event is 4 ( four ). So, when OnEvent callback function is invoked the event argument is 0xfffffda2, and the pParameters argument holds information about the parameters of the MouseMove event. The pParameters->cArgs gets the count of event parameters. In this case it is 4. The pParameters->rgvarg[0] points to the last parameter from event's definition, in this case pParameters->rgvarg[0] stores the Y parameter of the MouseMove event. The the pParameters->rgvarg[1] points to the X parameter of the MouseMove event, the the pParameters->rgvarg[2] points to Shift argument of the MouseMove event, and the the pParameters->rgvarg[3] points to the Button parameter of the MouseMove event. The following OnEvent callback handler displays the event's identifier and the list of its parameters to dialog's title ( the lParam parameter points to owner dialog ) :

May I start developing an application using a DEMO version?

This is applicable only to COM objects. 

Yes, you may start developing your application using any DEMO/TRIAL version. If you are doing a test application, you are free to do anything that you want. Instead, we do not recommend starting developing a real application using the DEMO version. The main difference and the most important, between DEMO and RETAIL configurations is that the DEMO version doesn't contain any runtime license information, and the RETAIL version does. And so what? Here's a scenario. If you are start using the DEMO version to build your application, the container won't save the control's runtime information (simple because the DEMO version doesn't not contain the runtime license information) into container's persistence. Once that you have decided that the product matches your requirements and you get the RETAIL version, the application won't work because the RETAIL version requires runtime license information, and the DEMO version didn't save such of information in the container's persistence. If you still started the application using the DEMO version, you need to replace all instances of the control's you purchased so the control's runtime license key is saved in the container's persistence, else your application won't work on the client's machine. Your application MUST be built on the development machine, on the machine where you installed the registered setup using your development license key. 

How can I create at runtime a licensed ActiveX control?

This is applicable only to COM objects.

(VB) HOW TO: Dynamically Add ActiveX Controls that Require Run-Time Licenses in VB.

Private Sub Form_Load()
    Dim obj As Object
    Licenses.Add "Exontrol.Tree", "xxxxxxxxxx"
    Set obj = Controls.Add("Exontrol.Tree", "tree", Me)
    obj.Visible = True
End Sub
where the "xxxxxxxxxx" is the control's runtime license key. The runtime license string is provided by us free of charge, at your request, while your maintenance or subscription is active ( NOT expired ). Your development license key is NOT the control's runtime license key. It may be useful to check also "The application works ok on the development machine, and doesn't work on the client machine. Is there anything I can do?"
 
(VB.NET) HOW TO: Dynamically Add ActiveX Controls that Require Run-Time Licenses in VB.NET (326651).
Imports System.Windows.Forms

Public Class AxTree
    Inherits AxHost

    Public Sub New()
        MyBase.New("3C5FC763-72BA-4B97-9985-81862E9251F2")
    End Sub
End Class

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim n As New AxTree
        Dim f As System.Reflection.FieldInfo
        f = GetType(AxHost).GetField("licenseKey", _
            Reflection.BindingFlags.NonPublic _
            Or Reflection.BindingFlags.Instance)
        f.SetValue(n, "xxxxxxxxxx")
        Controls.Add(n)
    End Sub
End Class

where the "xxxxxxxxxx" is the control's runtime license key. The runtime license string is provided by us free of charge, at your request, while your maintenance or subscription is active ( NOT expired ). Your development license key is NOT the control's runtime license key. It may be useful to check also "The application works ok on the development machine, and doesn't work on the client machine. Is there anything I can do?"

(C#) HOW TO: Dynamically Add ActiveX Controls that Require Run-Time Licenses in C# (326652)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication2
{
	public partial class Form1 : Form
	{
		public class AxTree : AxHost
		{
			public AxTree() : base("3C5FC763-72BA-4B97-9985-81862E9251F2")
			{
			}
		}

		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			AxTree n = new AxTree();
			System.Reflection.FieldInfo f =
			typeof(AxHost).GetField("licenseKey",
			System.Reflection.BindingFlags.NonPublic |
			System.Reflection.BindingFlags.Instance);
			f.SetValue(n, "xxxxxxxxxx");
			Controls.Add(n);
		}
	}
}
where the "xxxxxxxxxx" is the control's runtime license key. The runtime license string is provided by us free of charge, at your request, while your maintenance or subscription is active ( NOT expired ). Your development license key is NOT the control's runtime license key. It may be useful to check also "The application works ok on the development machine, and doesn't work on the client machine. Is there anything I can do?"
 
(C++) HOW TO: Dynamically Add ActiveX Controls that Require Run-Time Licenses in C++.
 
a) MFC: This code is applied to VC++ 6.0 and prior version. The code is NOT applicable on greater versions of VC++, such as 2005, 2008, ... On these the VS environment knows to handle runtime-licensed controls. So, on C++ 6.0 you need to use the Create definition with bstrLicKey parameter ( from the control's wrapper class ) as shown bellow:

You need to add the following code to your OnInitDialog function.

if ( m_control.GetControlUnknown() == NULL )
{
	// creates the control at runtime
	CRect rtClient; GetClientRect( &rtClient );
	m_control.Create( _T(""), WS_VISIBLE + WS_CHILD, rtClient, this, IDC_CONTROL, NULL, FALSE, L"xxxxxxxxxx" );
}

where the m_control is the control, and the IDC_CONTROL is the identifier of the control in the dialog that hosts it. Attention! the runtime license string is provided by us free of charge, at your request. Your development license key is NOT the control's runtime license key! The 'xxxxxxxxxx' is not a valid runtime license key!.

Let's say that you are using the eXG2antt/COM component on a VC++ project with MFC support. So, the code to be added on the OnInitDialog looks as follow:

if ( m_g2antt.GetControlUnknown() == NULL )
{
	// creates the control at runtime
	CRect rtClient; GetClientRect( &rtClient );
	m_g2antt.Create( _T(""), WS_VISIBLE + WS_CHILD, rtClient, this, IDC_G2ANTT1, NULL, FALSE, L"xxxxxxxxxx" );
}

The m_g2antt is of CG2antt type, where the CG2antt was generated by the MFC Class Wizard. 

The control's wrapper contains two definitions for Create function and the code being added on OnInitDialog is using the following definition:

BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
	const RECT& rect, CWnd* pParentWnd, UINT nID,
	CFile* pPersist = NULL, BOOL bStorage = FALSE,
	BSTR bstrLicKey = NULL)
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
	pPersist, bStorage, bstrLicKey); }

where the "xxxxxxxxxx" is the control's runtime license key. The runtime license string is provided by us free of charge, at your request, while your maintenance or subscription is active ( NOT expired ). Your development license key is NOT the control's runtime license key. It may be useful to check also "The application works ok on the development machine, and doesn't work on the client machine. Is there anything I can do?"

b) ATL: AtlAxWinLic7 is the name of a window class that helps provide ATL's control-hosting functionality for licensed controls. When you create an instance of this class, the window procedure will automatically use the control-hosting API to create a host object associated with the window and load it with the control that you specify as the title of the window.
If you are not familiar with the IClassfactory2 interface, you might read first the article Q151771. Anyway, we can provide a class CAxWnd ( C++ based, no MFC ), that helps users to create and host licensed or unlicensed ActiveX controls in C++ projects ( please contact us in order to get the source code for the CAxWnd class ). The CAxWnd class is able to handle control' events too. You need to insert the axwnd.h and axwnd.cpp files into your C++ project, and to call CAxWnd::AxCreateControl function, like in the following sample. The AxCreateControl function takes the following parameters: the handle to the parent window, the rectangle where the ActiveX should be created, the control's identifier( like MSCAL.Calendar ), the license string (Attention! the runtime license string is provided by us free of charge, at your request. Your development license key is NOT the control's runtime license key! The 'xxxxxxxxxx' is not a valid runtime license key! ), an extra data and a callback function that is invoked when the hosted ActiveX control fires an event.
   RECT rtClient = {0,0,256,256};
    CAxWnd* pAxWnd = NULL;
    if ( SUCCEEDED( CAxWnd::AxCreateControl
				(
    				    m_hWnd,
    				    rtClient,
    				    L"Exontrol.Calendar",
    				    L"xxxxxxxxxx",
    				    (LPARAM)this,
    				    OnEvent
    				    &pAxWnd
    				)
		    )
	)
    {
	RECT rtClient = {0}; GetClientRect( &rtClient );
	pAxWnd->MoveWindow( &rtClient );
    }
    void CALLBACK OnEvent( LPARAM lParam, DISPID event, DISPPARAMS* pParameters )
    {
	// The hosted ActiveX fires an event		
    }

where the "xxxxxxxxxx" is the control's runtime license key. The runtime license string is provided by us free of charge, at your request, while your maintenance or subscription is active ( NOT expired ). Your development license key is NOT the control's runtime license key. It may be useful to check also "The application works ok on the development machine, and doesn't work on the client machine. Is there anything I can do?"

(Delphi) HOW TO: Dynamically Add ActiveX Controls that Require Run-Time Licenses in Delphi

Opens the control's wrapper declaration ( TLB file ) of the control's type library. Let's say you are using the exontrol's exg2antt control. Delphi generates a class wrapper in the unit EXG2ANTTLib_TLB, so open this unit. Inside the file, search for LicenseKey field. 

Generally, the Delphi environment generates a code such as: LicenseKey: nil (*HR:$80004002*); This definition must be replaced as follows: 

CLicenseKey: array[0..X] of Word = ( xxxxxxxxxx );
LicenseKey: @CLicenseKey;

where the "xxxxxxxxxx" is the control's runtime license key. The runtime license string is provided by us free of charge, at your request, while your maintenance or subscription is active ( NOT expired ). Your development license key is NOT the control's runtime license key. It may be useful to check also "The application works ok on the development machine, and doesn't work on the client machine. Is there anything I can do?"

If I try to register a dll or ocx file using rgsvr32 I get "DllRegisterServer in ... Return code was 0x8002801C"?

This is applicable only to COM objects. 

This is usually happen when the user that makes the registration doesn't have access to the OLE registry key. In this case you have to make sure that you have access to the HKEY_CLASSES_ROOT registry key. The HKEY_CLASSES_ROOT (HKCR) key contains file extension associations and COM class registration information such as ProgIDs, CLSIDs, and IIDs. In order to make sure that you have access to that key, open the regedit tool ( of course if you have access to regedit:), and tries to create a new key. On 32-bit Microsoft Windows systems, a user must have the correct permissions for access to the system registry. Change your permissions or have them changed by the system administrator.

I have installed the Exontrol product, using Administrator account, but when I use another account, the control tells me that "License information for this component not found, You do not have an appropriate license to use this functionality in the design environment."?

This is applicable only to COM objects. 

This is happen because the component is not able to read the encrypted license key, from the OLE registry. You must be sure that the user has the full access to HKEY_USERS key. You can use the regedt32 editor to change the rights of the user on the machine.

You do not have an appropriate license to use this functionality?

This is applicable only to COM objects.  
 
Symptoms: A Visual Basic program runs properly on the development computer. The executable file, along with the associated control (.OCX) and .DLL files, are copied to another computer. Attempting to run the program on the other computer results in the error 424 with the following message: You do not have an appropriate license to use functionality.

Cause:
- The controls or DLLs used by the program were not registered in the system registry of the other computer.
- Some controls used by the program require dependency files that need to be installed and registered in the other computer.
- Some files, such as those for JET, are required to be in specific directories.

MORE INFORMATION
- Visual Basic uses substantially more OLE components. These components have dependency files and require system registry modifications. Even if another setup program is used, Setup Wizard should be run on your application to allow the Wizard to determine all the necessary files needed by your program.
- A simple way to your project dependencies is to open the vbp file using the notepad. Check each Reference or Object values. Make sure that you will include these files on the setup, or make sure that these files exist on the test machine.
- You have to build your application on the computer where the Exontrol products were installed! Don't try to build the application on a computer where an Exontrol product was only copied and registered!

Is your control marked for safety?

This is applicable only to COM objects. 

Yes. All of our components implement the IObjectSafety interface as safe for initialization and safe for scripting. The IObjectSafety interface should be implemented by objects that have interfaces that support untrusted clients (for example, scripts). This allows the owner of the object to specify which interfaces need to be protected from possible untrusted use.

I've installed my application ( which uses one of your components ) to a client machine, but when I try to insert a new control to a Form I've got "You have no license for this ActiveX, contact its supplier", "License information for this component not found. You do not have an appropriate license to use this functionality in the design environment", "The ActiveX control cannot be instantiated." or "The ActiveX control could not be instantiated because it requires a design-time license". Am I doing something wrong?

This is applicable only to COM objects. 

The Retail or Source Code version requires a runtime license key on the client machine. The Demo or Site Wide version doesn't require a runtime license key on the client machine. You've got the message because the control is not allowed to be used in design environment on the client machines. Your application includes the runtime license key of the component, so that's why your application is working. Your application uses the runtime mode on the client machine, but it includes a runtime license key that was saved on the development machine. Let's suppose that a control has no runtime license key. What that means? That means that any customer that installs your application will be able to use and build application using the components that your application installs, and it is not allowed. If your application fails to run on the client machine due to a license problem, you have to be sure that the application itself doesn't use the component in design mode.

For some reason, we have lost the setup / development license key / runtime license key / changing the registered email address. What it is possible we can do?

This is applicable to COM/NET/WPF objects. 

We will provide you free of charge the information/data you request like setup / development license key / runtime license key / changing the registered email address , while your maintenance is not expired. In other words, for 1 year from the purchase date. If your maintenance is expired, you must renew your maintenance before requesting any of these information/data. You can find here the prices to renew your maintenance. Once you renew your maintenance, please provide us any information we can locate you on our side, in case you were using any email address that you do not have registered with us when you originally purchased the component. 

Unicode

What is the difference between ANSI and UNICODE?

This is applicable only to COM objects (The /NET and /WPF assemblies are UNICODE aware).

The main difference between ANSI vs UNICODE is that the ANSI can not display UNICODE characters ( Cyrillic, Hebrew, Chinese, Japanese, Hindu, ...), while the UNICODE can. So the ANSI may display only ASCII characters, 1- byte character, while the UNICODE version can display UNICODE characters, 2- bytes character,

I have just downloaded your product but seems to be the ANSI version. How can I get the UNICODE version?

This is applicable only to COM objects (The /NET and /WPF assemblies are UNICODE aware).

You can download the UNICODE versions here. The setup's caption should include the UNICODE string as "Exontrol - ExTree ActiveX/NET UNICODE - Demo Version (5.0.0.1:15000)". The Version property of the control should include the UNICODE string. If the Version property doesn't include the UNICODE string, it is possible to have installed the ANSI version.

I have installed the UNICODE trial version of eXTree/COM, eXEdit/COM, but I still can't see the UNICODE characters. What am I doing wrong?

This is applicable only to COM objects. 

After installing you can check the following:

  • Place the control to a form, and check the Version property. If the Version property ends with UNICODE string, it means that you already have installed the UNICODE configuration. If the UNICODE string is not listed do run regsvr32 /u extree.dll or regsvr32 /u exedit.dll so the previously version of the component is unregistered, and run the setup again. The setup must list UNICODE in the setup's caption. For instance: "Exontrol - ExTree ActiveX/NET UNICODE - Demo Version (5.0.0.1:15000)"
  • If the Version property of the control ends on UNICODE as: "5.0.0.1.DEMO.UNICODE", please make sure that you are using an UNICODE font, so change the control's Font property to "Arial Unicode MS" for instance, and add your unicode strings to the control.

In order to avoid this problem run regsvr32 /u extree.dll or regsvr32 /u exedit.dll before installing, or in other words uninstall any previous version of eXTree / eXEdit controls. This could happen if you previously installed another component from us, that installs the eXHelper tool, that uses and installs the eXTree and eXEdit ANSI versions.

I see "question/square marks" string when using UNICODE version. What am I doing wrong?

This is applicable only to COM objects. 

Unicode is a method of software character encoding that treats all characters as having a fixed width of two bytes. This method is used as an alternative to Microsoft® Windows® ANSI character encoding, which because it represents characters in one byte, is limited to 256 characters. Because Unicode can represent over 65,000 characters, it accommodates many languages whose characters are not represented in ANSI encoding. If you need the UNICODE version of the component, please check the I have just downloaded your product but seems to be the ANSI version. How can I get the UNICODE version?.

The control displays "question marks" strings if:

  • you are using a non-unicode string ( ANSI )
  • your control's font is non-unicode
  • you are running the ANSI version of the control. ( check the control's Version property. It should include the UNICODE string ).
  • you are using a character that has no representation in the control's  font

The following C++ sample uses the exGrid UNICODE version, "Arial Unicode MS"  font, in an ANSI application. The sample displays an UNICODE string in as single cell ( ISO 2022, IR 87 ):

The VB following sample uses exTree UNICODE version, "Arial Unicode MS"  font:

With Tree1
        If InStr(1, .Version, "UNICODE") > 1 Then
            .BeginUpdate
                
                ' Creates and assigns an UNICODE font to the control
                Dim f As New StdFont
                f.Name = "Arial Unicode MS"
                Set .Font = f
            
                .LinesAtRoot = exGroupLinesAtRoot
                With .Columns
                    .Add StrConv("ColumnAa", vbFromUnicode)
                    .Add StrConv("ColumnBb", vbFromUnicode)
                End With
                
                With .Items
                    Dim h As HITEM
                    h = .AddItem(StrConv("ItemAa", vbFromUnicode))
                    .CellCaption(h, 1) = StrConv("ItemBb", vbFromUnicode)
                    h = .InsertItem(h, , StrConv("Cc", vbFromUnicode))
                    .CellCaption(h, 1) = StrConv("Cdcc", vbFromUnicode)
                    
                End With
        .EndUpdate
    Else
        MsgBox "You are running an ANSI version. You need the UNICODE version."
    End If
End With

The second sample uses ChrW function to create UNICODE strings:

 With Tree1
        If InStr(1, .Version, "UNICODE") > 1 Then
            .BeginUpdate
                
                ' Creates and assigns an UNICODE font to the control
                Dim f As New StdFont
                f.Name = "Arial Unicode MS"
                Set .Font = f
            
                With .Columns
                    .Add ChrW(&H6021) + ChrW(&H6040)
                End With
                
                With .Items
                    .AddItem ChrW(&H7021) + ChrW(&H7040)
                End With
                
        .EndUpdate
    Else
        MsgBox "You are running an ANSI version. You need the UNICODE version."
    End If
End With

The following sample loads records from a table:

Dim srcPath As String
Dim rs As Object, f As Object
srcPath = App.Path & "\unicode.mdb"

Set rs = CreateObject("ADODB.Recordset")
rs.Open "[Language t]", _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= """ & srcPath & """", _
    3 ' Opens the table using static mode

With Tree1
    If InStr(1, .Version, "UNICODE") > 1 Then
    
        .BeginUpdate
        
        ' Creates and assigns an UNICODE font to the control
        Dim ff As New StdFont
        ff.Name = "Arial Unicode MS"
        Set .Font = ff
        
        ' Adds the columns
        With .Columns
            For Each f In rs.Fields
                .Add(f.Name).Width = 256
            Next f
        End With
        
        ' Loads the items
        With .Items
            While Not rs.EOF
                Dim h As HITEM
                    h = .AddItem(rs(0).Value)
                    .CellCaption(h, 1) = StrConv(rs(1).Value, vbFromUnicode)
                rs.MoveNext
            Wend
        End With
        
        .EndUpdate
        
    Else
        MsgBox "You are running an ANSI version. You need the UNICODE version."
    End If
End With

I got the error 0x80070078 when I am doing regsvr32 on Windows 95/98/Me systems. I am using the UNICODE version of the control.

This is applicable only to COM objects. 

The Microsoft® Layer for Unicode provides a complete set of Unicode APIs on Microsoft Windows® 95, Windows 98, and Windows Millennium Edition (Windows Me). With this, Unicode applications can run on Microsoft Windows NT®, Windows 2000, Windows XP, and Windows 95/98/Me.The Windows 95/98/Me systems requires Microsoft Layer for Unicode (UnicoWS.dll)  in order to run UNICODE application. Make sure that your system includes the UnicoWs.dll file. The Microsoft Layer for Unicode is available as a redistributable from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm.

See also: I see "question/square marks" string when using UNICODE version. What am I doing wrong?

Copyright 1999-2017 Exontrol. All rights reserved.