What's wrong with this code, part 19
Wow, I've done 19 of these? Cool.
I got an email question from a reader earlier today, and I realized that his question would make a great "What's wrong with this code" question.
He has a C++ function "GetValue" that is used to retrieve a value from something (it doesn't actually matter what). His function is intended to be called from OLE automation, so it has three versions, one which takes a VARIANT, one which takes an integer index, one which takes a BSTR key. If the input VARIANT is an integer, it assumes that it's an index, if the input VARIANT is a string, it assumes that it's a key.
Here's the version of the code as provided by the reader:
HRESULT GetValue(VARIANT Index, VARIANT& Value){ // Try Index as offset HRESULT hr = VariantChangeType(&Index, &Index, 0, VT_I4); if(SUCCEEDED(hr)) return GetValue(Index.lVal, Value); // Try Index as key hr = VariantChangeType(&Index, &Index, 0, VT_BSTR); if(SUCCEEDED(hr)) return GetValue(Index.bstrVal, Value); // Bad Index return E_INVALIDARG; }
His idea was that the function would be called like this:
void SomeFunction(){ CComVariant Value; GetValue(CComVariant(_T("1")), Value); }
Unfortunately, this doesn't quite work :(. Why not?
As always Kudos and comments tomorrow.
Edit: I can't count :)