Since switching to a new laptop I’ve been using VS.NET (Visual Studio .NET) 2003 instead of good-old (bad-old?) VS6. That meant also switching to S60 SDK 2.1 from 2.0 for the ability to generate the right project files. After modifying the perl modules that generate the project files a bit more to my liking, it’s been good.
Today I was going to generate some debug data through a fairly complex class and started thinking: why don’t I use intellisense (I have a confession to make: once upon a time I programmed COM in Visual Basic, and IntelliSense worked perfectly since all the type information was in IDL/TLBs)? Turns out, it doesn’t work with this class. The class doesn’t appear in the Class View either.
After a lot of deleting .ncb files, rebuilding everything in the IDE (including getting the Auto Build Dependencies Add In and fixing most of the bugs in it since I’ve normally build some of my projects from the command line) I ended up just doing a binary search through the class definition: commenting out recursively smaller portions of it, closing VS, deleting the .ncb file, reopening VS, checking the class view etc.
The problem is the line:
IMPORT_C virtual ~CBBPresence();
and look and behold, somebody else has come across the same phenomenon. It seems that that the Class View/IntelliSense craps out if you have a virtual destructor preceded by a macro (and some other conditions, but that’s the gist of it). How’s that for an obscure bug.
Since the destructor is virtual, I don’t really need the IMPORT_C, right… I vaguely recall that there was a compiler that needed it tho. It’s probably the CodeWarrior Nokia hands out. Both VS and gcc are happy without it, so I’m leaving it for the time being.