我是个新手在VS2003下  创建一个标准的DLL    在DLL 新加一个类  新加的类中需要使用到COM  编译没问题  但在用EXE程序测试时跟踪到 
HRESULT hr = ::CoInitializeEx( NULL,COINIT_APARTMENTTHREADED );这里返回结果为S_FALSE; 
再下面hr = ::CoCreateInstance( 
CLSID_ObjectTest,              //创建的Com对象的类标识符(CLSID) 
NULL,                          //指向接口IUnknown的指针 
CLSCTX_INPROC_SERVER,       //运行可执行代码的上下文CLSCTX_INPROC_SERVER 
IID_IUnknown,       //创建的Com对象的接口标识符 
(LPVOID *) &pUnk);            //用来接收指向Com对象接口地址的指针变量 
这里显示"没注册的类" 
望高手指教如何修改  谢谢!!!!!!!!

解决方案 »

  1.   

    COM初始化了没? CoInitialize
      

  2.   

    CoInitializeEx返回S_FALSE可能是你的EXE应调用过了,具体可以通过GetLastError看看错误码。
    至于CoCreateInstance返回“没注册的类”,要确保你的COM组件是注册的。
      

  3.   

    sys0000    我的解决方案中包含两个项目  一个是DLL  还有个是EXE   EXE只是用来辅助调试DLL的  确实如您所说 我在调试的过程中  已经加载DLL   但没有涉及到COM的初始化等操作   那样有没有影响?   还有您说的注册的问题   难道要在EXE中做注册的操作吗   刚学着用COM  很多不懂   请多多赐教  不胜感谢         
      

  4.   

    在CoCreateInstance前要确保你的CLSID_ObjectTest实现的COM对象是已注册的,否则创建会不成功。
      

  5.   

    typedef IID CLSID;
    #define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
            const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
    MIDL_DEFINE_GUID(CLSID, CLSID_ObjectTest,0x90887F12,0xE5B0,0x4D8A,0xA9,0x15,0x3C,0x62,0xD3,0x1B,0x6E,0x3F);上面这样是不是已经算是注册的了?