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
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.