TweetFollow Us on Twitter

Apr 96 Top 10
Volume Number:12
Issue Number:4
Column Tag:Symantec Top 10

Symantec Top 10

By Andy McFarland, Symantec Technical Support

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

Q: I have written a constructor for my CPanorama derived class so I can pass some specific initial values, but now all the parts of the object I specified in the Visual Architect are coming up NULL or garbage. What’s going on?

A: When it comes time to instantiate a class created in Visual Architect, a TCL macro new_by_name is used. It calls a (default) constructor if you have written one, or simply an implied (default-default) constructor if you have not. In either case, the information you specified in the VA is read in from the resource file with GetFrom() after all the constructors in the inheritance chain for your class have been called.

VA can call only default constructors. This includes constructors with no parameters and those for which all the parameters have default values. If you write a constructor that requires that at least one value be passed, you will be creating an object separate from the one VA is going to create. You may still initialize non-TCL members which may have been added to your VA-generated class either in the body of a default constructor or as parameters with default values.

Override GetFrom() if you need to use information from the VA resource file in your intitialization. For instance, a Rect frameRect might be used to save you from having to use the LongToQDRect() macro in toolbox calls that require a Rect. It is perfectly valid (and may be simpler) to put all of your construction/initialization code into GetFrom(), and not write a constructor at all.

Q: VA conveniently creates Save and SaveAs file menu items. What do I actually have to do to save my document to a file?

A: CDocument has a data member itsFile, a CFile*, which will point to whatever species of CFile you actually create, such as CDatafile, CResFile or CPictFile, etc.

The Save As menu item is connected to CDocument:: DoSaveFileAs(). PickFileName() is called from there, which puts up a StandardPutFile() dialog to retrieve the vitals of the file-to-be in an SFReply record.

Finally, DoSaveFileAs() passes the SFReply record to DoSaveAs(), which is what you need to overide in your document class, i.e. in CMain. At this point you need to allocate space for itsFile if you haven’t already.

Now just use all the nifty methods inherited from CFile, CDataFile and perhaps CPictFile to do things like creating, opening, closing, reading and writing to the file and changing its name. For simple file I/O, you may never have to call a File Manager routine directly.

Q: I’m trying to use the TCL macro new_by_name() with a VA-generated class, but it’s not working. What’s up?

A: At the beginning of the file you will see TCL_DEFINE_CLASS_M1(Cfoo,x_Cbar). This is the macro that makes the class an RTTI class (type “Run-Time Type Identification” into THINK Reference for a full explanation.) VA defaults to the M1 suffix, which must be changed to D1 if new_by_name() is to be used. Note that most people will rarely, if ever, need to use new_by_name() instead of TCL_NEW().

Q: Is it possible to create and use a routine descriptor for a member function? When I do so, the arguments are assigned in the wrong order.

A: No. There are various problems involved. There are some implied parameters to member functions, like the this pointer (a pointer to the object). Further, the parameters are passed in a different order (Pascal style) but stack cleanup is done C-style.

Q: I’m getting error -1708, “Couldn’t complete the last command because the AppleEvent was not handled”, when trying to build a library.

A: This usually results from the ToolServer not being installed properly. Check to be sure there is an alias for ToolServer in the (Tools) folder. Also, be sure to rename the alias as “ToolServer”. You may also need to copy the Toolserver folder from the CD, Apple Software:Tools: Toolserver1.1.1, to your hard drive.

Q: How do I get the Standard Console to accept single keystrokes without a Carriage Return?

A: Use the csetmode() function.


#include <stdlib.h> // For Constant EXIT_SUCCESS

#include <iostream.h> // For C++ I/O, cin and cout

//#include <stdio.h> // If you use straight C I/O

#include <console.h> // For cgetmode

main()

{

char c;

printf( "Type a character: ");

csetmode(C_CBREAK,stdin); // Allow single key inputs

c = getchar();

printf( "\nYou typed: '%c'", c, "\n" );

return 0;

}


Q: When I bring my SPM project up to date, a Build Errors window shows up but is empty. What’s going on?

A: Your code is probably generating compiler warnings that you aren’t seeing because the Build Errors window is set to hide them. Click on the Show Warnings button.

Q: Can I use exception handling without the TCL?

A: To use exception handling without the Think Class Library, you must include BRLib and Exceptions.cp in your project. Also, you must 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 work only on a completely constructed object. TCL_END_CONSTRUCTOR helps the compiler to determine the complete construction of an object.

See the example below to see 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: Okay. I’ve done everything I’m supposed to do to use exception handling without the TCL, but I get a bunch of link errors when I try to use TCL_NEW.

A: Rebuild BR_Lib.o with

 
  #define TCL_UNSAFE_ALLOCATION.

Q: Why does writing a text handle using CSaver cause garbage in the stream when I read it in?

A: When you create an arbitrary length handle and then fill only part of it, the whole handle length is written (and then read) and so you end up with garbage. To get CSaver to work correctly with handles, you need either to create a handle the right size to begin with, or to resize it when assigning the text to it. As an example we will stream out a CEditText object.

Within the myContents.cp file:

    

// Don’t bother allocating space for the handle.


In GetFrom(), stream in the text:


stream >> myMainText;


In PutTo(), stream out the handle and kill it:


stream << myMainText;

DisposHandle(myMainText);


In CMain.cp::WindowToContents, construct the handle, and fill it:


long len = fMain_Pano3->GetLength(); // get the length we want

itsContents->myMainText = NewHandleCanFail( len );

BlockMove( *fMain_Pano3->GetTextHandle(),

itsContents->myMainText, len );


Special thanks to Michael Hopkins, Craig Conner, Glenn Austin, Scott Morison, and Mark Baldwin.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Geekbench 4.4.0 - Measure processor and...
Geekbench provides a comprehensive set of benchmarks engineered to quickly and accurately measure processor and memory performance. Designed to make benchmarks easy to run and easy to understand,... Read more
CleanMyMac X 4.4.4 - Delete files that w...
CleanMyMac makes space for the things you love. Sporting a range of ingenious new features, CleanMyMac lets you safely and intelligently scan and clean your entire system, delete large, unused files... Read more
TeamViewer 14.4.2669 - Establish remote...
TeamViewer gives you remote control of any computer or Mac over the Internet within seconds or can be used for online meetings. Find out why more than 200 million users trust TeamViewer! Free for non... Read more
Paperless 3.0.6 - $69.95
Paperless is a digital documents manager. Remember when everyone talked about how we would soon be a paperless society? Now it seems like we use paper more than ever. Let's face it - we need and we... Read more
BetterTouchTool 3.141 - Customize multi-...
BetterTouchTool adds many new, fully customizable gestures to the Magic Mouse, Multi-Touch MacBook trackpad, and Magic Trackpad. These gestures are customizable: Magic Mouse: Pinch in / out (zoom)... Read more
TextMate 2.0.rc.29 - Code/markup editor...
TextMate is a versatile plain text editor with a unique and innovative feature set which caused it to win an Apple Design Award for Best Mac OS X Developer Tool in August 2006 A rapidly growing... Read more
Little Snitch 4.4.1 - Alerts you about o...
Little Snitch gives you control over your private outgoing data. Track background activity As soon as your computer connects to the Internet, applications often have permission to send any... Read more
Little Snitch 4.4 - Alerts you about out...
Little Snitch gives you control over your private outgoing data. Track background activity As soon as your computer connects to the Internet, applications often have permission to send any... Read more
MPlayer OSX Extended 16 - Multimedia pla...
MPlayer OSX Extended is the future of MPlayer OSX. Leveraging the power of the MPlayer and FFmpeg open source projects, MPlayer OSX Extended aims to deliver a powerful, functional and no frills video... Read more
Google Chrome 75.0.3770.142 - Modern and...
Google Chrome is a Web browser by Google, created to be a modern platform for Web pages and applications. It utilizes very fast loading of Web pages and has a V8 engine, which is a custom built... Read more

Latest Forum Discussions

See All

TEPPEN guide - Tips and tricks for new p...
TEPPEN is a wild game that nobody asked for, but I’m sure glad it exists. Who would’ve thought that a CCG featuring Capcom characters could be so cool and weird? In case you’re not completely sure what TEPPEN is, make sure to check out our review... | Read more »
Dr. Mario World guide - Other games that...
We now live in a post-Dr. Mario World world, and I gotta say, things don’t feel too different. Nintendo continues to squirt out bad games on phones, causing all but the most stalwart fans of mobile games to question why they even bother... | Read more »
Strategy RPG Brown Dust introduces its b...
Epic turn-based RPG Brown Dust is set to turn 500 days old next week, and to celebrate, Neowiz has just unveiled its biggest and most exciting update yet, offering a host of new rewards, increased gacha rates, and a brand new feature that will... | Read more »
Dr. Mario World is yet another disappoin...
As soon as I booted up Dr. Mario World, I knew I wasn’t going to have fun with it. Nintendo’s record on phones thus far has been pretty spotty, with things trending downward as of late. [Read more] | Read more »
Retro Space Shooter P.3 is now available...
Shoot-em-ups tend to be a dime a dozen on the App Store, but every so often you come across one gem that aims to shake up the genre in a unique way. Developer Devjgame’s P.3 is the latest game seeking to do so this, working as a love letter to the... | Read more »
Void Tyrant guide - Guildins guide
I’ve still been putting a lot of time into Void Tyrant since it officially released last week, and it’s surprising how much stuff there is to uncover in such a simple-looking game. Just toray, I finished spending my Guildins on all available... | Read more »
Tactical RPG Brown Dust celebrates the s...
Neowiz is set to celebrate the summer by launching a 2-month long festival in its smash-hit RPG Brown Dust. The event kicks off today, and it’s divided into 4 parts, each of which will last two weeks. Brown Dust is all about collecting, upgrading,... | Read more »
Flappy Royale is an incredibly clever ta...
I spent the better part of my weekend playing Flappy Royale. I didn’t necessarily want to. I just felt like I had to. It’s a hypnotic experience that’s way too easy to just keep playing. | Read more »
Void Tyrant guide - General tips and tri...
Void Tyrant is a card-based dungeon-crawler that doesn’t fit in the mold of other games in the genre. Between the Blackjack-style combat and strange gear system alone, you’re left to your own devices to figure out how best to use everything to your... | Read more »
Webzen’s latest RPG First Hero is offici...
You might be busy sending your hulking Dark Knight into the midst of battle in Webzen’s other recent release: the long-anticipated MU Origin 2. But for something a little different, the South Korean publisher has launched First Hero. Released today... | Read more »

Price Scanner via MacPrices.net

Amazon drops prices, now offers clearance 13″...
Amazon has new dropped prices on clearance 13″ 2.3GHz Dual-Core non-Touch Bar MacBook Pros by $200 off Apple’s original MSRP, with prices now available starting at $1099. Shipping is free. Be sure to... Read more
2018 15″ MacBook Pros now on sale for $500 of...
Amazon has dropped prices on select clearance 2018 15″ 6-Core MacBook Pros to $500 off Apple’s original MSRP. Prices now start at $1899 shipped: – 2018 15″ 2.2GHz Touch Bar MacBook Pro Silver: $1899.... Read more
Price drop! Clearance 12″ 1.2GHz Silver MacBo...
Amazon has dropped their price on the recently-discontinued 12″ 1.2GHz Silver MacBook to $849.99 shipped. That’s $450 off Apple’s original MSRP for this model, and it’s the cheapest price available... Read more
Apple’s 21″ 3.0GHz 4K iMac drops to only $936...
Abt Electronics has dropped their price on clearance, previous-generation 21″ 3.0GHz 4K iMacs to only $936 shipped. That’s $363 off Apple’s original MSRP, and it’s the cheapest price we’ve seen so... Read more
Amazon’s Prime Day savings on Apple 11″ iPad...
Amazon has new 2018 Apple 11″ iPad Pros in stock today and on sale for up to $250 off Apple’s MSRP as part of their Prime Day sale (but Prime membership is NOT required for these savings). These are... Read more
Prime Day Apple iPhone deal: $100 off all iPh...
Boost Mobile is offering Apple’s new 2018 iPhone Xr, iPhone Xs, and Xs Max for $100 off MSRP. Their discount reduces the cost of an Xs to $899 for the 64GB models and $999 for the 64GB Xs Max. Price... Read more
Clearance 13″ 2.3GHz Dual-Core MacBook Pros a...
Focus Camera has clearance 2017 13″ 2.3GHz/128GB non-Touch Bar Dual-Core MacBook Pros on sale for $169 off Apple’s original MSRP. Shipping is free. Focus charges sales tax for NY & NJ residents... Read more
Amazon Prime Day deal: 9.7″ Apple iPads for $...
Amazon is offering new 9.7″ WiFi iPads with Apple Pencil support for $80-$100 off MSRP as part of their Prime Day sale, starting at only $249. These are the same iPads found in Apple’s retail and... Read more
Amazon Prime Day deal: 10% (up to $20) off Ap...
Amazon is offering discounts on new 2019 Apple AirPods ranging up to $20 (10%) off MSRP as part of their Prime Day sales. Shipping is free: – AirPods with Charging Case: $144.99 $15 off MSRP –... Read more
Amazon Prime Day deal: $50-$80 off Apple Watc...
Amazon has Apple Watch Series 4 and Series 3 models on sale for $50-$80 off Apple’s MSRP as part of their Prime Day deals with prices starting at only $199. Choose Amazon as the seller rather than a... Read more

Jobs Board

*Apple* Systems Architect/Engineer, Vice Pre...
…its vision to be the world's most trusted financial group. **Summary:** Apple Systems Architect/Engineer with strong knowledge of products and services related to Read more
*Apple* Graders/Inspectors (Seasonal/Hourly/...
…requirements. #COVAentryleveljobs ## Minimum Qualifications Some knowledge of agricultural and/or the apple industry is helpful as well as the ability to comprehend, Read more
Best Buy *Apple* Computing Master - Best Bu...
**710003BR** **Job Title:** Best Buy Apple Computing Master **Job Category:** Store Associates **Location Number:** 000171-Winchester Road-Store **Job Description:** Read more
Best Buy *Apple* Computing Master - Best Bu...
**709786BR** **Job Title:** Best Buy Apple Computing Master **Job Category:** Sales **Location Number:** 000430-Orange Park-Store **Job Description:** **What does a Read more
Geek Squad *Apple* Master Consultation Agen...
**709918BR** **Job Title:** Geek Squad Apple Master Consultation Agent **Job Category:** Services/Installation/Repair **Location Number:** 000106-Palmdale-Store Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.