There are two types of relationships between PB objects that may force the regeneration of all the related objects. Inheritance and association. Inheritance is obvious, if there was a change in the ancestor, the descendants have to be rebuilt. Association (instance variables) may not be as obvious. I think starting with PB4 there was a change affecting what gets saved in the pbl. In order to improve performance in addition to p-code PB also saves a snapshot of function definitions in all the related objects. Remember that warning you get when you change a function definition in an object?
Here is what it means when translated to PFC. If you change w_master in the extension layer all of it's descendants in PFC layer have to be regenerated. These are pfc_w_sheet, pfc_w_frame, etc... What may not be as obvious is that if you change a function definition in a transaction object - n_tr, all other objects that have instance variables of n_tr type (pfc_u_dw is one) have to be regenerated. From that point on each of these objects will carry a snapshot of what n_tr looked like at that point in time. If later you change n_tr without rebuilding all the related objects you will most probably cause a GPF.
In addition to the standard PowerBuilder Deployment DLLs PFC based applications require the following files:
16 bit applications
32 bit applications
Contributed by Sharon Buntz
- The reason why you should mark all PBLs as PBDs/Dlls is because in the PFC not all objects are directly referenced, so otherwise some PFC objects may be left out of your EXE. Examples include: your sheets, their tab/tabpage user objects, pfc_u_tab/pg and u_tab/pg.
- Nowadays, the runtime engine is optimized so well that it is no longer a big issue to try to put your ancestor objects into the EXE anymore.
Error Number 2
Error text = Null object reference
Window/Menu/Object = <no group>
Error Object/Control = <no class>
Script = <no rout>
Line in Script = 0
...and they go off on wild tangents trying to figure out why. Many times it's just because the newly created DLLs/PBDs were not moved to the appropriate directories - ones in the system or application path (in the registry) so they can be found when running the EXE.
Quick Checklist - Objects to deploy
- Application EXE
- Application PBDs/DLLs
- .INI files
- .HLP Help files
- All Bitmaps (.BMP) and Icons (.ICO) [which were not included in your .PBR file]
- MSVCRT40.DLL (Microsoft DLL needed to execute the .EXE)
- PowerBuilder runtime DLLs
- PFC runtime DLLs
- Database runtime DLLs and DB engine (if applicable)
- ODBC Connectivity Drivers DLLs (if applicable)
- Any needed runtime DLLs for any OLE/OCX/ActiveX's (PowerBuilder and/or Component DLLs)
- Any needed .LIC licence files (for any OLE/OCX/ActiveX's, etc)
- Any other programs called directly or used via OLE/OCX/ActiveX's, e.g. CALC.EXE and NETSCAPE.EXE
- Plus, don't forget your registry entries for any OLE/OCX/ActiveX's, ODBC and application user settings
Other resources:
Contributed by PFCGuide staff, except
where noted otherwise.
PFCGuide is sponsored by Dynamic Technology Group
The information provided is for advice only and not to be considered a contract or a
liability against Dynamic Technology Group.
Last revised: February 15, 2004 03:58 AM.