• MacTech Network:
  • Tech Support
  • |
  • MacForge.net
  • |
  • Apple News
  • |
  • Register Domains
  • |
  • SSL Certificates
  • |
  • iPod Deals
  • |
  • Mac Deals
  • |
  • Mac Book Shelf

MAC TECH

  • Home
  • Magazine
    • About MacTech in Print
    • Issue Table of Contents
    • Subscribe
    • Risk Free Sample
    • Back Issues
    • MacTech DVD
  • Archives
    • MacTech Print Archives
    • MacMod
    • MacTutor
    • FrameWorks
    • develop
  • Forums
  • News
    • MacTech News
    • MacTech Blog
    • MacTech Reviews and KoolTools
    • Whitepapers, Screencasts, Videos and Books
    • News Scanner
    • Rumors Scanner
    • Documentation Scanner
    • Submit News or PR
    • MacTech News List
  • Store
  • Apple Expo
    • by Category
    • by Company
    • by Product
  • Job Board
  • Editorial
    • Submit News or PR
    • Writer's Kit
    • Editorial Staff
    • Editorial Calendar
  • Advertising
    • Benefits of MacTech
    • Mechanicals and Submission
    • Dates and Deadlines
    • Submit Apple Expo Entry
  • User
    • Register for Ongoing Raffles
    • Register new user
    • Edit User Settings
    • Logout
  • Contact
    • Customer Service
    • Webmaster Feedback
    • Submit News or PR
    • Suggest an article
  • Connect Tools
    • MacTech Live Podcast
    • RSS Feeds
    • Twitter

ADVERTISEMENT
Volume Number:11
Issue Number:2
Column Tag:Think Top 10

Think Top 10

This monthly column, written by Symantec’s Technical Support Engineers, aims to provide you with technical information based on the use of Symantec products.

By Mark B. Baldwin and Steve Howard, Symantec Technical Support

Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.

Q. Why do I get bus errors when I create a CStyleText object by using the constructor with arguments?

A. In the process of upgrading the TCL, constructors with arguments were added to the classes. In this case, constructors with arguments do not create a new handle to a TERec, the macTE data member of the CStyleText object. To work around this, call the constructor with no arguments and call the IStyleTextX() method.

Q. I am having trouble using sizeof() with printf(). For example:

printf("char size is %d.", sizeof(char));

outputs "char size is 0." Why do I get the wrong result?

A. The output is wrong because the return value of the sizeof() function is a size_t (an unsigned long). Use an %ld rather than a %d as a format specifier. Thus, the correct syntax is

"printf ("The size of a char is %ld.", sizeof(char));" 

Q. How can I avoid problems deleting heap objects whose references are on the stack when using exception handling? The pointer (which is on the stack) to the object becomes invalid when the stack unwinds and only the destructors for automatic objects are guaranteed to be called when an exception is thrown.

A. To handle this, declare pointers as volatile. Last month we explained why you should use the volatile type. Below is a practical example. Use volatile file pointers so that stack unwinding does not reset the value of the pointer (prohibiting the file from being closed).

  funClass * volatile funClassPtr;    // Syntax for volatile declaration 
  funClassPtr = NULL;         // Pointer to NULL guarantees delete as safe.
  int myInt = 1;                      // Watch in debugger to see
                                      //   the stack unwind.
  try_ {
    funClassPtr = TCL_NEW(funClass, ());//macro for new operator
    myInt = 2;                          //put new value on stack
    Failure (2, 100);                   // Force exception 
  } 
  catch_all_() {                      //catch block
    
  delete funClassPtr;                 //this calls destructor.
     
     // myInt is reset to 1, delete removes the object from the  heap 
  }
  end_try_                            //end of try block

Q. How can I use exception handling without using the Think Class Library?

A. To use exception handling without the Think Class Library, include BRLib and Exceptions.cp in your project. Also, compile with the directive #define NO_TCL

The four macros used to make exception handling work correctly are:

  AUTO_DESTRUCT_OBJECT
  TCL_NEW
  TCL_END_CONSTRUCTOR
  TCL_START_DESTRUCTOR

The macro AUTO_DESTRUCT_OBJECT will guarantee that the destructor is called for an automatic object on the stack. A destructor will only work on a completely constructed object. TCL_END_CONSTRUCTOR helps the compiler to determine the complete construction of an object.

Here’s an example that shows how the macros are used.

class funClass TCL_AUTO_DESTRUCT_OBJECT //macro in class header  
{ 
public:
    funClass()  {                       // no arg constructor 
    cout<< "In constructor."<<endl;
    char * myStr = new char[64];        // allocate memory 
    TCL_END_CONSTRUCTOR                 // End of the constructor
    }
    virtual ~funClass() {               // virtual destructor 
    TCL_START_DESTRUCTOR                // Beginning of the destructor 
    cout<< "In destructor."<<endl;
    delete [] myStr;                    // deallocate memory 
    } 
};

Q. Where can I get the Quickdraw GX headers?

A. APDA has a Quickdraw GX Developer’s Kit which contains a CD with the electronic versions of Inside Macintosh for GX, headers, required system software components, and excellent examples which are compilable under THINK C or Symantec C++. For ordering information, call (800) 282-2732. [If all you need is the header files, check out the MacTech Magazine online sites. See page 2 for details - Ed stb]

Q. When I build an application with the TCL, the application does not seem to be scriptable. How can I make it scriptable?

A. The default flags for the SIZE Resource of the application are set to not receive Background NULL Events. Make sure that the flags for your application have this bit turned on.

Q. I have a program that I’m converting from DOS and would like to be able to draw some simple graphics to the console window. How can I do that?

A. Don’t do it. If you draw to the console window, you will not receive update events. However, if you just can’t help yourself from going down this path, here is how to do it.

 #include <iostream.h>
    
 WindowPtr myWindow;         // To be used for the console window.
     
 void main (void)    {    
   cout << " ";                //A simple way to show the console.
   myWindow = FrontWindow();   //Get a pointer to the console.
   SetPort(myWindow);          //Set the port for drawing.
   PenNormal();                //Set the pen for drawing.
   LineTo(100,47);             //Draw a line.     
 }

Q. If I am mixing C and C++ code, should I turn on the option to use Native Floating Point format?

A. Yes. Symantec’s C++ compiler is using the Native Floating Point format. To make sure that your floating point calculations give you the expected results, turn on Use Native Floating Point in the options for the C compiler.

Q. Will Symantec be updating the THINK Reference Databases?

A. Yes. THINK Reference is undergoing a massive overhaul. It will be updated for the Universal Headers and the Think Class Library, and will include new databases for C++ Error Messages. As before, references will be hyperlinked for easy access to information.

Special thanks to: Craig Conner, Colen Garoutte-Carson, Rick Hartmann, Michael Hopkins, Scott Morison, Celso Barriga, Kevin Irlen, Yuen Li, and Chris Prinos.

 
MacTech Only Search:
Community Search:

 
 
 

 
 
 
 
 
  • SPREAD THE WORD:
  • Slashdot
  • Digg
  • Del.icio.us
  • Reddit
  • Newsvine
  • Generate a short URL for this page:



MacTech Magazine. www.mactech.com
Toll Free 877-MACTECH, Outside US/Canada: 805-494-9797
MacTech is a registered trademark of Xplain Corporation. Xplain, "The journal of Apple technology", Apple Expo, Explain It, MacDev, MacDev-1, THINK Reference, NetProfessional, Apple Expo, MacTech Central, MacTech Domains, MacNews, MacForge, and the MacTutorMan are trademarks or service marks of Xplain Corporation. Sprocket is a registered trademark of eSprocket Corporation. Other trademarks and copyrights appearing in this printing or software remain the property of their respective holders.
All contents are Copyright 1984-2010 by Xplain Corporation. All rights reserved. Theme designed by Icreon.
 
Nov. 20: Take Control of Syncing Data in Sow Leopard' released
Nov. 19: Cocktail 4.5 (Leopard Edition) released
Nov. 19: macProVideo offers new Cubase tutorials
Nov. 18: S Stardom anounces Safe Capsule, a companion piece for Apple's
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live