www.exontrol.net

copyright 1999-2008 by eXontrol


faq

The eXSuite package contains more than 40 components, with over 200 objects, 8,000 functions, and more than 2,000,000 lines of source code...

Frequently Asked Questions

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 trial 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 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 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 or win XP platform?

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

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?

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 ( COM configuration ) 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 ( COM configuration ) 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.

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, or software programs that are less commonly used. 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.

Disable DEP in 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.

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 NOT applicable to NET Assemblies.

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 NOT applicable to NET Assemblies.

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 NOT applicable to NET Assemblies.

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 NOT applicable to NET Assemblies.

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?

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 access the help file by pressing F1 key when in VB and the control is selected in design mode. You can also access the help file by typing ControlName.chm in the START menu RUN box, if you are not running VB. For instance, type exgrid.chm and the help file for exGrid component will be opened.

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. 

This is NOT applicable to NET Assemblies.

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. 

This is NOT applicable to NET Assemblies.

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

Please check the upgrade product policy here.

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

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

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

This is applicable only to COM Objects

Any retail, site or source version of the control installs on the development machine, in your system folder the dll that should be redistributed. So, the ONLY file that is needed on the client machine is installed by your development setup program in your system folder. In case you are using the Print and Print Preview feature, the exprint.dll file is required too. Nothing else is required. You can use a deployment tool in order to deploy your application and its dependencies, or you can use RegSvr32 tool as well. Of course, there are more alternatives to register a component but all of them do the same. The control's file 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  and exComboBox 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 by your installation program. 

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

This is applicable only to NET Assemblies

The .NET assemblies does not require registration so your application needs only to copy the assemblies files to the folder's application.

See also: What are the differences between retail and site version?

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

This is NOT applicable to NET Assemblies.

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 NOT applicable to NET Assemblies.

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, team, source, or site version for the product. You have to use the license key only with version you received. You cannot use the development license key for demo/trial setup file.

How do I build a CAB file?

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 NOT applicable to NET Assemblies.

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?

Yes, you may start developing your application using any DEMO 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 NOT applicable to NET Assemblies.

(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. This code creates and adds the eXTree to a form at runtime. In order to access properties and methods of the eXTree you need to use the Object method like follows:
Dim exTree As EXTREELib.Tree
Set exTree = obj.Object
With exTree
    .BeginUpdate
        .Columns.Add "C1"
        .Columns.Add "C2"
    .EndUpdate
End With
Your project must include a reference to eXTree component, so the EXTREELib.TREE type is known, else a compiling error occurs.
 
(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 NOT applicable to NET Assemblies.

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 NOT applicable to NET Assemblies.

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 NOT applicable to NET Assemblies.
 
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 NOT applicable to NET Assemblies.

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 NOT applicable to NET Assemblies.

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?

You can download the COM/UNICODE versions here. 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 see "question/square marks" string when using UNICODE version. What am I doing wrong?

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 NOT applicable to NET Assemblies.

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?