PowerBuilder
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 build Isolated Application using your DLL as Isolated COM (Registration-Free Activation of COM)?

Powerbuilder doesn't have the option to compile a custom manifest file in the application so we use an external manifest file. To do this, you have to do the following on your Powerbuilder project:

  • open the deployment properties of your project
  • open the security tab
  • under 'Generate Options': choose the option 'External Manifest' in the dropdown.
Now when you build your application, an external manifest file will be created that you can customize. 

The entries in the manifest file can be created using the ExHelper application.

For instance, the manifest file for PowerBuilder, to include the eXG2antt and eXPrint control can look such as:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
	<assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="Sybase.PB" type="win32"></assemblyIdentity>
	<description>PowerBuilder</description>	
	<dependency>
		<dependentAssembly>
			<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
		</dependentAssembly>
	</dependency>
	<file name="exg2antt.dll" hashalg="SHA1">
		<comClass clsid="{CD481F4D-2D25-4759-803F-752C568F53B7}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="Exontrol.G2antt" description="ExG2antt Chart ActiveX Control" miscStatusContent="recomposeonresize,setclientsitefirst,activatewhenvisible,cantlinkinside,insideout" />
		<comClass clsid="{2DD65709-C0BA-4764-AADF-820919FF181B}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Column" description="Column Class" />
		<comClass clsid="{28AC7755-06AC-4439-9ADD-EA012B4B2F10}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Columns" description="Columns Class" />
		<comClass clsid="{1801677D-52FE-4759-B10A-C4FE70EAE035}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Items" description="Items Class" />
		<comClass clsid="{E2B55693-3D70-426B-9E08-ECF9DC93D98D}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.OleEvent" description="OleEvent Class" />
		<comClass clsid="{919D16E8-2002-4C11-BC81-1CA0FF8FDDEF}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.OleEventParam" description="OleEventParam Class" />
		<comClass clsid="{C39F7717-C8C1-44A0-A495-DB5E92FDC79D}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Appearance" description="Appearance Class" />
		<comClass clsid="{9E3FB380-6CB7-4CCA-B726-FE191133A8A0}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ExDataObjectFiles" description="ExDataObjectFiles Class" />
		<comClass clsid="{A30C0D8D-98A5-476B-860A-3397645BA8F8}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ExDataObject" description="ExDataObject Class" />
		<comClass clsid="{4B82A833-421F-496F-BE2F-F5C41DBED707}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" description="Template Class" />
		<comClass clsid="{D4D088E8-0FA5-4414-A322-D105149D6313}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" description="TemplatePage Class" />
		<comClass clsid="{1AA7ABFA-8C27-4579-9F06-7CCFAF301B72}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Editor" description="Editor Class" />
		<comClass clsid="{23AA3A91-C107-44B2-BD23-3978B343DB8A}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Chart" description="Chart Class" />
		<comClass clsid="{7862FEFF-7FE6-401A-A692-CE4758CDD0FC}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Level" description="Level Class" />
		<comClass clsid="{D6C57467-EC60-429F-87B7-3751DFB1EEAE}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Bar" description="Bar Class" />
		<comClass clsid="{75A35E6C-2144-435F-96FF-0BE4A9643176}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Bars" description="Bars Class" />
		<comClass clsid="{FC5F6509-4354-4D92-A9A9-24EEB081670E}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ConditionalFormat" description="ConditionalFormat Class" />
		<comClass clsid="{DEDF38EB-BEEA-48D1-8D9E-AF0C81FA8E71}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.ConditionalFormats" description="ConditionalFormats Class" />
		<comClass clsid="{91E561B9-B514-4F1F-BAE1-3E5903C85DA3}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZoomFormat" description="InsideZoomFormat Class" />
		<comClass clsid="{513CF640-A498-4800-ACEF-4473491CF282}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZoom" description="InsideZoom Class" />
		<comClass clsid="{B6528DA9-8C75-4389-9B72-EE8A8C2BABA3}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.InsideZooms" description="InsideZooms Class" />
		<comClass clsid="{15F8B91F-49AD-4663-B878-8A3DE05E4A30}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Notes" description="Notes Class" />
		<comClass clsid="{926F669D-85C4-4D6D-BC9D-BA3759D8B237}" tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" progid="ExG2antt.Note" description="Note Class" />
		<typelib tlbid="{70337FFD-810F-4CDC-B09A-44CDCEE7DF1B}" version="1.0" helpdir="" flags="HASDISKIMAGE" />
	</file>
	<file name="exprint.dll" hashalg="SHA1">
		<comClass clsid="{4DEB0D2B-6EBD-4A22-9835-48AB9CDC8088}" tlbid="{ED7B66F6-C533-48E9-B536-6F3B0E9C5839}" progid="Exontrol.Print" description="ExPrint ActiveX Control" />
		<comClass clsid="{F8DBA669-F3DB-423C-8744-8349C3D85554}" tlbid="{ED7B66F6-C533-48E9-B536-6F3B0E9C5839}" progid="ExPrint.Page" description="Page Class" />         
	</file>	
</assembly>

The PROGID is only required if you connect to the object directly by name in the code. We do this to verify that the DLL files are available in the directory. If we add the eXG2antt/eXPrint control directly to the user interface using the IDE than this isn't needed because underlying the CLSID is used by the IDE.

Sample code where the progid is required in the manifest:

oleobject lole

SetNull(lole)
lole = create oleobject
lole.ConnectToNewObject('Exontrol.G2antt')
...

Thanks to Jeroen Van Herwegen, Tauris, Belgium, who submitted the note.

It appears that I can not use the ItemFromPoint property in my environment. What else I can do?

The ItemFromPoint property returns the handle of the item from the specified cursor location. 

In order to use the ItemFromPoint function in PowerBuilder, you may want to use the x-script of control's ExecuteTemplate property as:

Event MouseMove(Button,Shift,X,Y)
LONG li_filenumber
li_filenumber = FileOpen ("pbdebug.txt", TEXTMODE!, WRITE!, LOCKWRITE!, APPEND! )
IF NOT isNULL(li_filenumber) AND li_filenumber > 0 THEN
            FileWriteEx(li_filenumber, string (this.object.ExecuteTemplate( "Dim h, c, hit; h = ItemFromPoint(-1,-1, c, hit )" ) ) + "~r~n" )
            FileClose(li_filenumber)
END IF
//Event end

where the ExecuteTemplate property executes x-script code and returns the result of the last operation. The x-script language is our internal programming language, that's provided by all of our /COM components, to access any property or method, that may be inaccessible due limitation of your programming language/environment.

Most of our UI controls provides the following properties that can work with x-script:

  • Template
  • TemplateDef
  • TemplatePut
  • ExecuteTemplate 

 

Copyright 1999-2017 Exontrol. All rights reserved.