No Longer Supported
Obsolete .OBJ Syntax No Longer Supported
A significant change has been made in object creation in 8.3 that improves the efficiency of object creation and destruction. Because of this change, an obsolete method of accessing objects has been removed: the ObjName.obj method of accessing global objects.
Prior to 8.3, the creation of an object on the desktop resulted in the compiler creating an object access method in the format of the symbol objName.obj. This symbol is no longer created. If you are using any of these symbols in your program, you will receive a compiler error, and you must change your application as follows:
// Old, obsolete access method
Send Xxxxx to MyObject.obj
// Suggested access method
Send Xxxxx to (MyObject(desktop))
Basically, change objName.obj to (objName(desktop)).
The .obj method has not been recommended since the very earliest days of DataFlex (well before DataFlex was released), so hopefully, you will have few instances of this code.
Not all .obj methods will require changing. If you are using name_object (also an obsolete technique), the .obj method will continue to work as it always did. The best way to find the places you need to change is to compile your application. All errors will be reported.
Technical Description
Prior to 8.3, DataFlex used rather complicated dependent lists to keep track of objects. Each object, including the desktop, had a dependent list of child objects. This method had drawbacks. When used with programs that created and destroyed many objects dynamically, you could get small memory leaks and, in some cases, noticeable significant performance problems.
The desktop object's list of child objects allowed the compiler to create special access methods for desktop objects—this is the .obj access syntax (e.g., send Foo of oName.obj). This compiler symbol was assigned a dependent list number (a very large negative number). When the runtime saw a very large negative number, it would replace the dependent number with a real object ID. Now that we do not create a dependent list, this method no longer works. Hence, we have changed fmac so that it no longer creates this .obj symbol. This means you must use the recommended and much clearer method of accessing global objects: (oName(desktop)).
The .obj name method is also used when you define an object name with name_object. This type of usage remains unchanged. If you've defined a desktop object or any object with the name_object command, your program will work as it always did. However, note that the use of name_object is strongly discouraged and has been for many years.