ActiveX Objects
This section contains a list of all existing ActiveX Objects.
How to Use ActiveX Objects
All of the new users of the SDK are often confused of what needs to be used and how to use it in general. This topic will provide a short description of the existing ActiveX Objects, their meaning and possibilities and how to use them.
IPXV_Control - the simple ActiveX Control that, when an OLE is embedded to a form or window, provides base functionality for the either viewing and/or manipulating PDF documents.
By using the ActiveX Control, you will gain access to the end-user Editor placed in your project's form/window etc. From the development perspective it will allow UI-manipulations like adding, redefining, removing commands, implementing custom event handling, using operations and plugins etc. Basically, it's a wrapper above the Core SDK like described here http://sdkhelp.tracker-software.com/view/Main_Page.
When using the IPXV_Control in the multiple child forms then the PXV_Inst should be created in the parent form once at the beginning of the program workflow and destroyed at the end of the program workflow. That means calling the IPXV_Inst::Init once at program start and IPXV_Inst::Shutdown at program end. The PXV_Inst of the IPXV_Control will be the same as this created PXV_Inst because there is only one Instance per program workflow. If all the above would be implemented then there won't be any problem with the later usage of the multiple child form application.
PXV_Inst - the main ActiveX Object of the PDF-XChange Editor SDK which provides general functionality and provides access to additional extensions within the SDK.
The PXV_Inst is normally used when you have the IPXV_Control embedded to your form or window. And normally the PXV_Inst is initialized with the control itself so you do not need to initialize it with the IPXV_Inst::Init in the most SDK usage scenarios. The IPXV_Inst::Init method could be used when you need to initialize plugins before initializing the IPXV_Control so that they will be available after the control initialization. Also, if you did not call the IPXV_Inst::Init method then the IPXV_Inst::Shutdown shouldn't be called as the Control will destroy the instance itself at the end of it's lifespan. Note that the PXV_Inst should be initialized in the same thread in which it will be destroyed (the same thing goes for the control). So basically, you'll need to initialize the IPXV_Control when the project loads and delete it when the project ends it's work.
As was mentioned before, the PXV_Inst should be extracted from the control using the IPXV_Control::Inst property and not created manually. Meaning that if you had the Control created that you already have the IPXV_Inst available and you can use it in your program within the Control's lifespan.
If you don't have the Control available and you still need to use Editor SDK's functionality then you will have to create the PXV_Inst manually as described in the PXV_Inst description.
PXC_Inst - the main ActiveX Object of the Core API SDK that provides much of the general functionality available to work with a PDF file and offers access to additional extensions of the SDK.
This could be used from both the Editor SDK and the Core API SDK. Meaning that if you have the Editor SDK and the IPXV_Inst available, the PXC_Inst could be extracted from it using the GetExtension method and not by creating it manually. If you only have the Core API SDK available then the PXC_Inst will be created and destroyed as described in the PXC_Inst description.
Also, if the Editor SDK is used then the PXC_Inst should not be initialized or finalized manually by using methods specified in the PXC_Inst description. It will be automatically destroyed with the IPXV_Inst that will be automatically destroyed with the IPXV_Control. So if you have the IPXV_Inst available than you only need to use the GetExtension method to get the IPXC_Inst whenever you need (or you can just do it once and store it in the global variable).
If the Core API SDK is used then the PXC_Inst should be initialized once and finalized once when the program exits (or DLL unloads).