I built the Toolbar last friday and it worked just fine but today the CoCreateInstance for my COM object (which is a User Broker process to make the toolbar work on Windows Vista - see [1] for the reason) returned 0x80020008 (Bad Variable Type). The build had no errors but when the toolbar called the CoCreateInstance() method it returned "Bad Variable Type". This took my whole day to figure out (maybe I'm just low on documents or XP) but I solved the problem.
Here is the code that generated the error:
ATL::CComPtr pub;
hr = pub.CoCreateInstance(CLSID_UserBrokerProcess,NULL,CLSCTX_LOCAL_SERVER); // hr = 0x80020008 "Bad Variable Type"Everything is fine with the code, but just see this method declaration in the IDL file for my IUserBrokerProcess:
[id(1234), method SetBinaryValue"), local] HRESULT SetBinaryValue([in] BSTR bstrKeyName, [in] BSTR bstrKeyValueName, [in] const void * pValue, [in] ULONG nBytes);Anything amiss?? It seems the Interface Definition Language does not support
void as a valid type. I had to comment all my methods in the .idl file, implementing .h file and its .cpp file and uncomment the methods one by one to debug this situation. I just changes the
void to
BYTE and everyting is fine now. Well not everything maybe, but it doesn't cry for 0x80020008 anymore.
[1]
MSDN Technical Articles: Understanding and Working in Protected Mode Internet Explorer