www.exontrol.net

copyright 1999-2010 by eXontrol


faq

The eXSuite package contains more than 40 components, with over 200 objects, 9,000 functions, and more than 3,000,000 lines of source code... Available as: /COM /NET /WPF

Frequently Asked Questions

The FAQ page shows the following topics:

Listed below are the questions that we are asked quite often. Before you write us, be sure to check here.

General

Programming

Documentation

Licensing, Deploying and Distribution

Unicode

General

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.

How much does your component cost?

You can do the following:
  • Click theicon located in the right side of the page.
  • 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.

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
  • during this time you are notified by e-mail about the latest changes of the products you subscribed for
  • your subscription provides all new product releases, updates (major and minor) and access to all betas in active development, while your subscription is active

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
  • during this time you are notified by e-mail about the latest changes of the products you subscribed for
  • your subscription provides all new product releases, updates (major and minor) while your subscription is active

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

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.

See also: How can I build Isolated Application using your DLL as Isolated COM?

How often a new version is released?

Unfortunately, we cannot predict the exactly date when a new version comes out. It depends, on how many changes we need to include to the version, and how the complex is each thing that needs to be included, and so it could take from a week to more weeks. Most of the changes are improvements to the product. You can check the control's release notes for each issue that has been added or fixed. Just count how many were added and how many were fixed, in case you want to ask us how stable is the control. All added issues were reported by our customers, or even non-customers. We consider important each customer's request for an improvement. If we found that your request is an improvement and could be a benefit for the product, be sure that it will be added. We take the liberty to decide if the reported feature will be added or not. Anyway, if you think that you find a problem we will be glad to hear it, so do not hesitate to contact us. Here's another thing that's important to mention about new versions! We never remove an old event, property or method, such that older projects could be broken. Adding new events, properties or methods won't break the code you have already written. New events, properties, or methods have new identifiers never used in the old version.

That's not hard to imagine that we care about our customers and our products. Just try to pay a visit to one of our competitors, ask for a change and see if someone will answer to your request, check if your requirement will be added, and how fast you will have your change included in the product. All that We ask from the customer is a clear specification for the change that he needs to have. If you are pleased with the change we did, we will be happy to get your opinion here. If the customer requires the change to be done in a specified time it's possible to be charged for the change. ( never if the change is considered fixing a problem that he reported ). 

We want to thank to all customers that we have for their patience and trust!

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?

The vast majorities of our components/products are written from scratch. The controls DO not wrap ( subclass ) Microsoft objects like ListBox, SysTreeView32, SysTabControl32, and so on.

Is your product able run either on a win98, winme, win nt 4, win 2000, win XP or vista platform?

Any of our products run just fine on Windows 95, Windows 98/ME, Windows NT, Windows 2000, Windows XP or Windows Vista.

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.

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.

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.

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.

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.

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.

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.

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.

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 Exontrol 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 a demo Exontrol 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.

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.

Your package must copy and register the DLL on the client machine. 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, 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: Can I use the /COM version without registering on the client machine?

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: How can I build Isolated Application using your DLL as Isolated COM?

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

The /NET Assemblies does NOT require registration. 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.

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

The /WPF Components does NOT require registration. 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: What are the differences between retail and site version?

How can I build Isolated Application using your DLL as Isolated COM?

This is applicable only to COM objects.

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. Typically, a side-by-side assembly is one to several DLLs.  

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.

You can choose from one of the two samples: A) which uses the eXPrint only, while B) the second sample uses the eXG2antt and eXPrint as Isolated COMs.

A) You can download the following C++ sample here, which uses the eXPrint/COM component as an Isolated COM, and built using C++ on VS 2005.

  1. Prepare the TLB (Type Library file ) and DLL files for Isolated COM(s) you use, in our case exprint.tlb and exprint.dll. Actually you need only the DLL as the TLB can be extracted from the DLL. Open the resources of the DLL, locate the "TYPELIB" resource, and export the item 1 as binary. Rename the 1.bin to exprint.tlb, and so you have the TLB file.
  2. Use the #import directive to include the type definition for isolated com as #import "exprint.tlb" or #import "exprint.dll"
  3. Create any isolated component using the program identifier instead control identifier, which here means __uuidof( EXPRINTLib::Print ) instead "Exontrol.Print".
  4. Include the TLB and DLL in the "Isolated COM" of the "Manifest Tool" on the project's property.

    In VS 2005 do the following:

     

    • Open the property sheet for the project.
    • Click the plus sign next to "Manifest Tool"
    • Click on "Isolated COM".
    • Next to "Type Library File" enter "exprint.tlb"
    • Next to "Component File Name" enter "exprint.dll".

     

  5. Build the project

Once the EXE is built, unregister the DLL, copy it in the same folder where the EXE is. This way the EXE will use always the DLL being found in the same folder, no matter if any other application install a newer or older version of the component.

B) You can download the following C++ sample here, which uses the eXPrint/COM and eXG2antt/COM components as Isolated COMs and built using C++ on VS 2005.

You can find additional information about isolated applications, registration-free activation here:

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 free of charge the latest released version of the product 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.

Where is the ocx?

This is applicable only to COM objects. 

We didn't use the OCX extension because it could suggest that the product uses MFC. All products are implemented to DLL files. All of our products are ATL based, and that means that files like mfc42.dll, msvcrt.dll, ... are NOT required.

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. Your development license key is not the control's runtime license key. 
 
(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. Your development license key is not the control's runtime license key.

(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. Your development license key is not the control's runtime license key.
 
(C++) HOW TO: Dynamically Add ActiveX Controls that Require Run-Time Licenses in C++.
 
a) MFC: Check the Create definition with bstrLicKey parameter, in the control's wrapper class.
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 provide a class CAxWnd ( C++ based ), 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		
    }

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.

Unicode

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 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?