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

Programming

Programming

How can I get the list of interfaces implemented by a COM object?

The ExPropertiesList control exports a property called Interfaces, that helps you to get the list of implemented interfaces. The MsgBox PropertiesList1.Interfaces(Me) displays a list of interfaces that form implements.

I have the control on a MultiPage control in VBA, when I change pages, the control loses it's content. How do I fix that?

The MultiPage control is implemented in the FM20.DLL file. The control loses it's content because the window that hosts the control is destroyed every time when the user changes the active page. If you would like to check this issue you need to add a MultiPage control to your project references, to insert a instance of MultiPage control to your main form, and to use the following code:
Private Declare Function GetWindow _
    Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias _
    "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2

Private Sub MultiPage1_Change()
    ' The MultiPage control has no hWnd property so we need to look for a window which
    ' class name is 'F3 Server 60000000'
    Dim h As Long
    h = GetWindow(Me.hwnd, GW_CHILD)
    ' Looks for the window that hosts ActiveX controls in a MultiPage control
    While (h <> 0)
        ' Gets the window's class name
        Dim strClass As String * 255
        GetClassName h, strClass, 255
        If (strClass Like "F3 Server 60000000*") Then
            ' We have found the handle of the MultiPage's window
                    ' Displays the window that hosts any ActiveX control
                    Debug.Print GetWindow(h, GW_CHILD)
        Exit Sub
    End If
    ' Gets the next window in the form
    h = GetWindow(h, GW_HWNDNEXT)
    Wend
End Sub

Now, run the project and select pages into your MultiPage control. You will see that the VB's immediate window displays different numbers, each time when you select a new page. Each number represents the handle of the window that hosts ActiveX controls in the MultiPage control. The MultiPage control destroys it's child window every time when a new page is activated. That means that any ActiveX control that is contained by a page in the MultiPage control will be destroyed each time when a new page is activated. How do I fix that? You can do one of the followings: use the Microsoft Tabbed Dialog Control ( tabctl.ocx )  instead MultiPage control, use Visible property of your control to hide or show the control when a page is activated,  load the control's content during changing the page.

How do I handle events in VB for a control created at runtime?

The VB provides the statement 'withevents' that can be used in order to notify you application when a runtime control fires an event. For instance, the following sample shows how to create and handle events for ExComboBox control. The project references needs to include a reference to 'ExComboBox 1.0 Control Library'.

 

Unload Me ( unloads the form ), generates the run-time error 361, "can't load or unload this object". What can I do

The VB Unload method unloads an object. The "Unload Me" statement closes the form. When "Unload Me" statement is called during in some events of the control, the VB closes the form, and so the control is closed too. So, the control is closed and it's deleted, but the VB still gives the control to the caller, and so an error 361 could occur. 

There are several options that you can apply in order to fix this problem.

  • DoCmd: In MS Access, you should call DoCmd.Close command instead Unload Me, such as: DoCmd.Close acForm, Me.Name
  • DoEvents: The Unload Me should be preceded by a DoEvents call, if calling within a UserForm.
  • WM_CLOSE: Call "PostMessage Me.hWnd,  WM_CLOSE, 0, 0" or "SendMessage Me.hWnd,  WM_CLOSE, 0, 0", instead calling the "Unload Me" statement. You need to declare the PostMessage API and the WM_CLOSE constant like follows: 

    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

    Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long

    Private Const WM_CLOSE = &H10

    With Ribbon1
          SendMessage GetParent(GetParent(.hwnd)), WM_CLOSE, 0, 0
    End With

  • SendKeys: Call the SendKeys "%{F4}", to close the current form.
  • Timer. You need to insert a disabled timer control to your form, and to call "Unload Me" statement in the timer's Timer event. You need to replace the "Unload Me" statement in the control's event, with Timer1.Enabled = True.

See also the Q189812 article in your MSDN, BUG: Unloading a Modal Form's Parent Form Causes VB To Hang  

How do I implement EXGRIDLibCtl.IownerDrawHandler and EXCOMBOBOXLibCtl.IOwnerDrawHandler in the same form "Ambiguous name detected" ?

Create a separate class for each interface with the same name, like in the following sample. For instance, let's say that in your form you wrote:
Implements EXCOMBOBOXLibCtl.IOwnerDrawHandler
Implements EXGRIDLibCtl.IOwnerDrawHandler

And you got the error: "Compile error: Ambiguous name detected: IOwnerDrawHandler"

Create and add to the project the Class1 class that implements the EXCOMBOBOXLibCtl.IOwnerDrawHandler like follows:

Implements EXCOMBOBOXLibCtl.IOwnerDrawHandler

Private Sub IOwnerDrawHandler_DrawCell(ByVal hDC As Long, ByVal left As Long, _
        ByVal top As Long, ByVal right As Long, ByVal bottom As Long, _
        ByVal Item As Long, ByVal Column As Long, ByVal Source As Object)
    ' Draws the cell. The Source points to the exComboBox object
End Sub

Create and add to the project the Class2 class that implements the EXGRIDLibCtl.IOwnerDrawHandler like follows:

Implements EXGRIDLibCtl.IOwnerDrawHandler

Private Sub IOwnerDrawHandler_DrawCell(ByVal hDC As Long, ByVal left As Long, _
    ByVal top As Long, ByVal right As Long, ByVal bottom As Long, ByVal Item As Long, _
    ByVal Column As Long, ByVal Source As Object)
    ' Draws the cell. The Source points to the exGrid object
End Sub

Private Sub IOwnerDrawHandler_DrawCellBk(ByVal hDC As Long, Options As Variant, _
    ByVal left As Long, ByVal top As Long, ByVal right As Long, ByVal bottom As Long, _
    ByVal Item As Long, ByVal Column As Long, ByVal Source As Object)
    ' Draws the cell's background. The Source points to the exGrid object
End Sub

So, in the main form we need the following declarations:

Dim c1 As New Class1
Dim c2 As New Class2 

So, when we need to specify an owner draw cell in the exComboBox control we need to something like following:

With ComboBox1
    With .Items
        Set .CellOwnerDraw(...) = c1
    End With
End With

In the exGrid the code should look like:

With Grid1
    With .Items
        Set .CellOwnerDraw(...) = c2
    End With
End With

Sometime, when form is maximized using a double-click a Click event is raised when it should not. What should I do?

When the user double-clicks the window's caption, the form is maximized, but the Windows system still sends a WM_LBUTTONUP message to the window from the cursor, and so a Click event may occur. The following VB sample shows how to remove this issue:

How to simulate a click?

The idea is to post a WM_LBUTTONDOWN message using the PostMessage API function like in the following sample:

The sample uses the hWnd property of the exGrid control to retrieve the handle of the window where click should occur.

How to simulate a CTRL + click?

Use the keybd_event API function to simulate pressing the CTRL key as in the following sample:

The sample uses the exontrol's eXList componet when the SingleSel property is False, so it supports multiple selection. Once the user presses the left mouse button, the sample simulates pressing the CTRL key too, so the item's state selection is toggled ie if the item is already selected another click will unselect it, and if the item is not selected the item gets selected, without unselecting the all items as would it happen without the trick. 

The LostFocus event seems that's not fired when clicked your control. What should I do?

Let's say that you need to change the caption of the selected item when a text field loses the focus using a code like follows:
Private Sub Text1_LostFocus()
    With Tree1.Items
        .CellCaption(.SelectedItem, 0) = Text1.Text
    End With
End Sub

Private Sub Tree1_SelectionChanged()
    With Tree1.Items
        Text1.Text = .CellCaption(.SelectedItem, 0)
    End With
End Sub

The VB environment controls the order of firing events. So, the SelectionChanged event is fired first, when the user clicks the control, and after that is fired the LostFocus event. This way, the result is not what we expected, so we need to find a work around so the order of the events should be LostFocus and then SelectionChanged. This way the correct item is updated when the text field loses the focus. The following code changes the order of the events, so the LostFocus event is fired first and after the SelectionChanged event is fired, if case.

Private Sub Tree1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    DoEvents
End Sub

The DoEvents method processes all windows messages currently in the message queue.

Drag-and-Drop operations for /COM components

Drag-and-drop is one of the fundamental metaphors underlying the Microsoft® Windows® family of operating systems. Users understand that some items can be moved around by holding the mouse down on them, and that they'll get appropriate visual feedback when they're over a spot where the item can be dropped. They expect to be able to move data and images from one spot to another this way. There are two steps required in order to be able to drag and drop items/objects/bars from our /COM components as follows:

Beginning a Drag-and-Drop Operation

To begin a drag-and-drop operation, you have to set the control's OLEDropMode property on 1 and to handle the OLEStartDrag / OLEDragOver event. The AllowedEffects / Effect parameter must be set on 1 or 2, and you need to call the SetData method of the Data parameter so you specify the data to be dragged.

Accepting Data From a Drag Operation

The control fires the OLEDragDrop event, when the user drags data to the control. The OLEDragDrop event occurs when a drag-and-drop operation is in progress (that is, some control has initiated a drag and drop operation) and the cursor enters the control.

The following Access sample shows the requirements in red:

Private Sub Form_Load()
    Grid1.OLEDropMode = exOLEDropManual
End Sub

Private Sub Grid1_OLEDragDrop(ByVal Data As EXGRIDLibCtl.IExDataObject, Effect As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim hI As HITEM
    hI = CLng(Data.GetData(exCFText))
    If (hI <> 0) Then
        With Grid1
            Dim c As Long, hit As HitTestInfoEnum
            Dim h As Long
            h = .ItemFromPoint(-1, -1, c, hit)
            If (h <> 0) Then
                .BeginUpdate
                With .Items
                    .SetParent hI, h
                    .ExpandItem(h) = True
                    .SelectItem(hI) = True
                End With
                .EndUpdate
            End If
        End With
    End If
End Sub

Private Sub Grid1_OLEStartDrag(ByVal Data As EXGRIDLibCtl.IExDataObject, AllowedEffects As Long)
    With Grid1
        Dim c As Long, hit As HitTestInfoEnum
        Dim h As Long
        h = .ItemFromPoint(-1, -1, c, hit)
        If (h <> 0) Then
            AllowedEffects = 2
            Data.SetData h, exCFText
        End If
    End With
End Sub

The sample lets user moves an item from another by drag and drop using the SetParent method of Items object. The OLEStartDrag event initiates the OLE Drag-Drop event, by carrying the handle of the item being moved from a parent to the item where the cursor is released.

The following VB6 sample shows how you can list the files being dropped:

Private Sub Form_Load()
    With Grid1
        .OLEDropMode = exOLEDropManual
    End With
End Sub

Private Sub Grid1_OLEDragDrop(ByVal Data As EXGRIDLibCtl.IExDataObject, Effect As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    With Data.Files
        If (.Count > 0) Then
            Dim s As String
            For i = 0 To .Count - 1
                s = s + .Item(i) + vbCrLf
            Next
            MsgBox s
        End If
    End With
End Sub

Private Sub Grid1_OLEDragOver(ByVal Data As EXGRIDLibCtl.IExDataObject, Effect As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single, ByVal State As Integer)
    If (Data.Files.Count > 0) Then
        Effect = 1
    End If
End Sub

Compile and build the EXE. Run the EXE, and drag and drop files from your Windows Explorer. As soon as you drop files from the Windows Explorer, the control displays the list of files you dragged.

How can I build Isolated Application using your DLL as Isolated COM (Registration-Free Activation of COM)?

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.

The solution is to include the control's manifest file to the application's resource under 24( Manifest Resource Type ) with the identifier 1.

  • Generating the RES file:
    • Open Visual Studio, select File\New\File and choose: Native Resource Template
    • Right-click the .rct iem and select the Add Resource ...
    • Add Resource dialog is opened, select Custom, and type 24, click OK
      • Open the eXHelper tool, and select the component whose manifest file you need to generate
      • Right-click the Middle/Template panel, and choose the Generate Assembly Manifest (exg2antt.manifest )
      • Copy the entire generated manifest ( CTRL + A, CTRL + C )
      • Go Back to Visual Studio's Resource Template
    • Paste the content you copied to the clipboard to the Custom resource you created (CTRL + V)
    • Click Properties, to you change the identifier of the resource item from IDR_RT_MANIFEST1 to 1
    • Save the template, by pressing the CTRL + S, so the Save File As dialog is opened
    • Select the 32-bit Resource File (*.res), from Save as type field
    • Change the name and location where the RES file to be saved ( for instance, exg2antt.res ), so it points to your VB6 project folder
    • Click the Save button
    • Finally, you have generated the RES file that includes the Resource Type 24/Manifest with the identifier 1, which contains the assembly manifest file for the component
  • Include the RES file as resource to your project
    • Open the VB6 project,
    • Go to Add-Ins\Add-In Manager...
    • Load the VB6 Resource Editor ( Load Behavior Check )
    • Go to Project \ Add New Resource File ...
    • The Open A Resource File dialog is opened
    • Select the RES file you previously generated ( exg2antt.res )
    • Click Open, and so the Project will show a new item exg2antt.res under the Related Documents
  • Generate the EXE file
    • Select the File \ Make Project1.exe ...
    • Change the name of the EXE to be generated and click OK
    •  Save all, and close the VB6 project
  • Copy the DLL to project folder
    • The "System Error &H8007007E (-2147024770). The specified module could not be found. " is generated if you run the EXE file, and this is happen because the EXE file can not locate the DLL you are using as Isolated COM
    • Copy the exg2antt.dll file ( or the DLL file you generated manifest from ) to the project folder ( same folder as EXE file )
    • Now, the EXE file can be run, and this way the EXE runs the component as Isolated COM

Now, copy the generated EXE and the exg2antt.dll to a client machine, and run the EXE. It will work, as in this case, the application uses the exg2antt as isolated, so it requires no registration ( regsvr32 ).

You can download it here the VB6 project. In the Release folder, you can find the sample.exe that uses the exg2antt.dll as isolated.

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

How do I load the control's Properties in VBA?

Select the (Custom) item in the properties browser. If the properties browser is not visible, please select the 'Properties Window' in the View menu.

Insert a control to a Form

Select the Dialog/Form in design mode, where you need to insert the control and do the following:
  • Click the ActiveX Controls from the Design panel
  • Select the control you need to insert from the "Insert ActiveX Control" list. For instance: "ExComboBox ActiveX Control"
  • Click OK, and the form will create and display your selected control 

Insert a control to a UserForm

First, you need to open the Visual Basic editor by doing any of the following:
  • Click the Database Tools \ Visual Basic or Press Alt + F11

Next, you need to insert the UserForm by doing the following:

  • Right Click the Visual Basic menu, and Select Customize
  • Go to Commands, and look for Insert
  • Click and Drag the UserForm to the Visual Basic menu
  • Close the Customize dialog, and press the newly "Insert UserForm" button

Next, you need to add the control to the newly insert user form:

  • Right Click the Visual Basic menu, and Select Customize
  • Go to Commands, and look for Tools
  • Click and Drag the Additional Controls... to the Visual Basic menu
  • Close the Customize dialog, and press the newly "Additional Controls" button
  • The "Additional Controls" is opened, and check/select the control you are about to add to the your user form. For instance: "ExComboBox ActiveX Control"
  • Click OK, and locate the ToolBox panel
  • The ToolBox panel, should include a new icon for the newly inserted control, click and drag this icon to the user form, and so you have inserted the control to the user-form

How can run my accdb database using your /COM without registering the DLL?

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.

This solution changes the MSACCESS.EXE.manifest file to include the <file> section of the control's manifest:

  • Generates the control's manifest file using the eXHelper tool
    • Open the eXHelper tool, and select the component whose manifest file you need to generate
    • Right-click the Middle/Template panel, and choose the Generate Assembly Manifest (exg2antt.manifest )
    • Copy the <file> section from the manifest file, which should look as:
      <file name="exg2antt.dll" hashalg="SHA1">
      	<comClass clsid="{CD481F4D-2D25-4759-803F-752C568F53B7}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="Exontrol.G2antt.1" description="G2antt Class" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst"></comClass>
      	<comClass clsid="{2DD65709-C0BA-4764-AADF-820919FF181B}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Column.1" description="Column Class" ></comClass>
      	<comClass clsid="{28AC7755-06AC-4439-9ADD-EA012B4B2F10}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Columns.1" description="Columns Class" ></comClass>
      	<comClass clsid="{1801677D-52FE-4759-B10A-C4FE70EAE035}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Items.1" description="Items Class" ></comClass>
      	<comClass clsid="{E2B55693-3D70-426B-9E08-ECF9DC93D98D}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.OleEvent.1" description="OleEvent Class" ></comClass>
      	<comClass clsid="{919D16E8-2002-4C11-BC81-1CA0FF8FDDEF}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.OleEventParam.1" description="OleEventParam Class" ></comClass>
      	<comClass clsid="{C39F7717-C8C1-44A0-A495-DB5E92FDC79D}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Appearance.1" description="Appearance Class" ></comClass>
      	<comClass clsid="{9E3FB380-6CB7-4CCA-B726-FE191133A8A0}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ExDataObjectFiles.1" description="ExDataObjectFiles Class" ></comClass>
      	<comClass clsid="{A30C0D8D-98A5-476B-860A-3397645BA8F8}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ExDataObject.1" description="ExDataObject Class" ></comClass>
      	<comClass clsid="{4B82A833-421F-496F-BE2F-F5C41DBED707}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}"  description="Template Class" ></comClass>
      	<comClass clsid="{D4D088E8-0FA5-4414-A322-D105149D6313}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}"  description="TemplatePage Class" ></comClass>
      	<comClass clsid="{1AA7ABFA-8C27-4579-9F06-7CCFAF301B72}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Editor.1" description="Editor Class" ></comClass>
      	<comClass clsid="{23AA3A91-C107-44B2-BD23-3978B343DB8A}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Chart.1" description="Chart Class" ></comClass>
      	<comClass clsid="{7862FEFF-7FE6-401A-A692-CE4758CDD0FC}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Level.1" description="Level Class" ></comClass>
      	<comClass clsid="{D6C57467-EC60-429F-87B7-3751DFB1EEAE}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Bar.1" description="Bar Class" ></comClass>
      	<comClass clsid="{75A35E6C-2144-435F-96FF-0BE4A9643176}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Bars.1" description="Bars Class" ></comClass>
      	<comClass clsid="{FC5F6509-4354-4D92-A9A9-24EEB081670E}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ConditionalFormat.1" description="ConditionalFormat Class" ></comClass>
      	<comClass clsid="{DEDF38EB-BEEA-48D1-8D9E-AF0C81FA8E71}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ConditionalFormats.1" description="ConditionalFormats Class" ></comClass>
      	<comClass clsid="{91E561B9-B514-4F1F-BAE1-3E5903C85DA3}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZoomFormat.1" description="InsideZoomFormat Class" ></comClass>
      	<comClass clsid="{513CF640-A498-4800-ACEF-4473491CF282}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZoom.1" description="InsideZoom Class" ></comClass>
      	<comClass clsid="{B6528DA9-8C75-4389-9B72-EE8A8C2BABA3}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZooms.1" description="InsideZooms Class" ></comClass>
      	<comClass clsid="{15F8B91F-49AD-4663-B878-8A3DE05E4A30}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Notes.1" description="Notes Class" ></comClass>
      	<comClass clsid="{926F669D-85C4-4D6D-BC9D-BA3759D8B237}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Note.1" description="Note Class" ></comClass>
      	<typelib tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" version="1.0" helpdir="" flags="HASDISKIMAGE"></typelib>
      </file>
  • Locate/Creates the MSACCESS.EXE.manifest, and adds the <file> section before /assembly ends as shown bellow ( the MSACCESS.EXE.manifest file should be located in the same folder where the MSACCESS.EXE executable is ):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
	<assemblyIdentity processorArchitecture="x86" type="win32" name="msaccess" version="12.0.0.0"></assemblyIdentity>
	<description>Microsoft Office Access</description>
	<dependency>
		<dependentAssembly>
			<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
		</dependentAssembly></dependency>
		<dependency>
			<dependentAssembly>
				<assemblyIdentity type="win32" name="AceDAO" version="12.0.0.0" language="*" processorArchitecture="X86"></assemblyIdentity>
			</dependentAssembly>
		</dependency>
		<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
			<security>
				<requestedPrivileges>
					<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
				</requestedPrivileges>
			</security>
		</trustInfo>
	<file name="exg2antt.dll" hashalg="SHA1">
		<comClass clsid="{CD481F4D-2D25-4759-803F-752C568F53B7}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="Exontrol.G2antt.1" description="G2antt Class" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst"></comClass>
		<comClass clsid="{2DD65709-C0BA-4764-AADF-820919FF181B}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Column.1" description="Column Class" ></comClass>
		<comClass clsid="{28AC7755-06AC-4439-9ADD-EA012B4B2F10}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Columns.1" description="Columns Class" ></comClass>
		<comClass clsid="{1801677D-52FE-4759-B10A-C4FE70EAE035}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Items.1" description="Items Class" ></comClass>
		<comClass clsid="{E2B55693-3D70-426B-9E08-ECF9DC93D98D}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.OleEvent.1" description="OleEvent Class" ></comClass>
		<comClass clsid="{919D16E8-2002-4C11-BC81-1CA0FF8FDDEF}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.OleEventParam.1" description="OleEventParam Class" ></comClass>
		<comClass clsid="{C39F7717-C8C1-44A0-A495-DB5E92FDC79D}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Appearance.1" description="Appearance Class" ></comClass>
		<comClass clsid="{9E3FB380-6CB7-4CCA-B726-FE191133A8A0}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ExDataObjectFiles.1" description="ExDataObjectFiles Class" ></comClass>
		<comClass clsid="{A30C0D8D-98A5-476B-860A-3397645BA8F8}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ExDataObject.1" description="ExDataObject Class" ></comClass>
		<comClass clsid="{4B82A833-421F-496F-BE2F-F5C41DBED707}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}"  description="Template Class" ></comClass>
		<comClass clsid="{D4D088E8-0FA5-4414-A322-D105149D6313}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}"  description="TemplatePage Class" ></comClass>
		<comClass clsid="{1AA7ABFA-8C27-4579-9F06-7CCFAF301B72}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Editor.1" description="Editor Class" ></comClass>
		<comClass clsid="{23AA3A91-C107-44B2-BD23-3978B343DB8A}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Chart.1" description="Chart Class" ></comClass>
		<comClass clsid="{7862FEFF-7FE6-401A-A692-CE4758CDD0FC}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Level.1" description="Level Class" ></comClass>
		<comClass clsid="{D6C57467-EC60-429F-87B7-3751DFB1EEAE}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Bar.1" description="Bar Class" ></comClass>
		<comClass clsid="{75A35E6C-2144-435F-96FF-0BE4A9643176}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Bars.1" description="Bars Class" ></comClass>
		<comClass clsid="{FC5F6509-4354-4D92-A9A9-24EEB081670E}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ConditionalFormat.1" description="ConditionalFormat Class" ></comClass>
		<comClass clsid="{DEDF38EB-BEEA-48D1-8D9E-AF0C81FA8E71}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ConditionalFormats.1" description="ConditionalFormats Class" ></comClass>
		<comClass clsid="{91E561B9-B514-4F1F-BAE1-3E5903C85DA3}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZoomFormat.1" description="InsideZoomFormat Class" ></comClass>
		<comClass clsid="{513CF640-A498-4800-ACEF-4473491CF282}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZoom.1" description="InsideZoom Class" ></comClass>
		<comClass clsid="{B6528DA9-8C75-4389-9B72-EE8A8C2BABA3}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZooms.1" description="InsideZooms Class" ></comClass>
		<comClass clsid="{15F8B91F-49AD-4663-B878-8A3DE05E4A30}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Notes.1" description="Notes Class" ></comClass>
		<comClass clsid="{926F669D-85C4-4D6D-BC9D-BA3759D8B237}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Note.1" description="Note Class" ></comClass>
		<typelib tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" version="1.0" helpdir="" flags="HASDISKIMAGE"></typelib>
	</file>
</assembly>
  • Save the MSACCESS.EXE.manifest file
  • Copy the exd2antt.dll to the Microsoft Office Folder ( the same folder where the MSACCESS.EXE and MSACCESS.EXE.manifest are, like C:\Program Files (x86)\Microsoft Office\Office12 )
  • Run the sample.accdb

You can download here all you need to run the sample.accdb that uses the exg2antt/com component as isolated/com.

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

Copyright 1999-2017 Exontrol. All rights reserved.