Chapter 19 Creating ActiveX Components
Defining an ActiveX component means defining the interfaces, transaction properties, and instance properties. If you define an ActiveX component in Jaguar before implementing the ActiveX component, the client developer can build the client at the same time you are building the ActiveX component. You can write the entire component in your IDE first and then import it into Jaguar, where you set the properties, but in this case, the client cannot be developed concurrently with the component.
You can also individually define each method and parameter using Jaguar Manager. After defining the interfaces, you can use Jaguar Manager to define the transaction and instance properties.
Chapter 5, "Defining Components" describes how to define and configure new components in Jaguar Manager. Chapter 6, "Defining Component Interfaces" describes how to define methods in the component interface.
WARNING! | When you define an ActiveX component, you must enter the progid. Do not use underscores in the progid for the component--use a period instead. |
Jaguar Manager can import ActiveX components from the component's type library (.tlb file) file or DLL. When you import the ActiveX component, it is automatically added to the Jaguar IDL repository. All CoClass classes (component object model classes) in the ActiveX component are imported.
Imported interfaces must conform to all Jaguar requirements for ActiveX components. (The requirements are listed in "Defining methods".)
Importing components does not import TabularResults::ResultSet and TabularResults::ResultSets return types. If a method in the imported component returns a result set, then you must use Jaguar Manager to change the return value to TabularResults::ResultSet or TabularResults::ResultSets in Jaguar Manager.
Before you can use the ActiveX import feature, make sure that you register the .dll file using the NT utility, regsvr32.exe:
regsvr32 <fully qualified path name to dll>
If you change the location of the .dll file after registration, you must reregister the file with the new location.
If the Import from ActiveX File option is not displayed, you are running Jaguar Manager or the Jaguar server on UNIX. You cannot create ActiveX components when either Jaguar Manager or the Jaguar server is running on UNIX.
To define methods, you must specify each method's return type and the number, datatypes, and modes of the method's parameters. See "ActiveX datatype support" for more information.
Do not use two consecutive underscores in method names--the underscores and the text following the underscores are deleted when stubs and skeletons are generated. This issue is related to function overloading, which is allowed in Java and C++ but not in ActiveX components. See "Operation declarations" for more information.
WARNING! | You cannot define methods with names that differ only in case--IDL does not support this. |
ActiveX component methods can return any valid datatype. Methods can take zero or more parameters. For each parameter you add, you must specify a name, a datatype, and the argument mode. Datatypes are limited to those supported by Jaguar Manager. "ActiveX datatype support" describes the supported types.
The transaction property specifies how a component participates in transactions. You can view and change the transaction property using the Transactions tab of the component's property sheet. For a description of each option on the Transactions tab, see "Transactional component attribute". A transaction consists of a number of database updates (which can be performed by multiple components) that are grouped into a single atomic unit of work.
This information is not stored in the Jaguar repository, so if you import a component, you must configure this property manually after importing it.
For a full description of how Jaguar handles transactions, Chapter 3, "Understanding Transactions and Component Lifecycles"
Instance properties impose constraints on concurrent execution of the different component instances. You can view and change instance properties using the Instances tab of the component's property sheet.
If you import a component interface, you must configure this property manually after importing the component. This information is not stored in the Jaguar repository.
Jaguar supports only the ActiveX single-threaded apartment model. In the single-threaded apartment model, each component instance is bound to the same thread for the lifetime of the instance. A thread is serviced by the same connection. Multiple instances may be simultaneously active on different threads. Shared stateful resources and global data should not be used.
To implement the single-threaded apartment model for an ActiveX component, enable only the Bind Thread option in the component properties Instances tab. Although most ActiveX-enabled IDEs use the single-threaded apartment model, if a component uses the ActiveX free-threaded model (in which a single method invocation can run on different threads), the component defaults to using the ActiveX single-threaded apartment model. ActiveX components developed with Power++ support the single-threaded apartment model.
Because Visual C++ 4.2 ActiveX components use nonapartment single-threading (in which multiple instances cannot be simultaneously active) by default, you must change them to use the single-threaded apartment model by:
The following settings specify the constraints that are placed on concurrent execution of different instances of the component. The choices are:
Copyright © 2000 Sybase, Inc. All rights reserved. |