Re: Conventions for writing a COM Object model
See inline.
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://www.mvps.org/vcfaq
=====================================
<simon_oleary99@yahoo.co.uk> wrote in message
news:1159520005.328195.145550@k70g2000cwa.googlegroups.com...
Hi,
my company's mature app requires a COM interface so I've started
implementing one.
I found this interesting article, whic has (strong) suggestions of
things to bear in mind...
http://blogs.msdn.com/craigskibo/archive/2004/01/23/62268.aspx
However, I'd like to get other peoples advice before I take it all as a
good idea, in particular:
Craig says:
"7. _NewEnum on collections objects is a method, not a property"
Doesn't make sense to me. While it's true that a property get accessor
is indistinguishable from a method invocation when parsing a script, this
only means that a script interpreter should try both... (I guess their
particular script interpreter tried method before property get?)
Now, everywhere I look _NewEnum is defined as a property, not a method.
Does anyone understand the signifcance of Craig's statement?
"5. When methods/properties take a numerical index, that index
must be 1 based (first item is 1, not 0)."
That is to be VB-friendly. VB programmers rarely use 0-based indices,
but they can using "Option Base 0". Personally I prefer to be C++ friendly
and use zero-based indices.
At our company, after careful consideration, we have decided to ignore
this advice, and go for 0-based (mainly based on the idea that hte new
.NET stuff does 0-based - any opinions from anyone else?
"44. No interfaces begin with the letter I unless the name of what is
being modeled begins with an I. For example, IncrementalSearch is OK,
but IWindows is not. The exception to this is if the interface is to be
implemented by the user. Example: IDTExtensibility2, IDTCommandTarget,
etc."
I in the beginning of an interface name is part of the so called hungarian
naming convention. I'd recommend you follow it.
The thing is whenever you create a project with devstudio, it always
gives your classes an interface name beginning with I - what I mean is
- devstudio does it by default - why shouldn't we all? What's the big
deal about using "I" ?