CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

为什么总是提示类未注册?

楼主nokialiu(一笑而过)2004-09-01 11:54:35 在 VC/MFC / ATL/ActiveX/COM 提问

我有一个OCX控件。在实现一个服务器的过程中要用到控件中的某些功能,服务器不能使用mfc,  
  现在有两个问题:  
  1)在我注册了控件之后,在一个非mfc项目中使用智能指针实例化该控件的一个接口,不成功。请看如下代码:  
                    if(CoInitialize(NULL)==S_OK)  
  {  
  printf("Initializes   the   COM   library   successfully.\n");  
  }  
  HRESULT   nRet;  
  _DESPPtr   pApp;  
  try  
  {  
  nRet=pApp.CreateInstance(__uuidof(_DESP));  
  }  
  catch(_com_error   e)  
  {  
  printf("%s\n",e.ErrorMessage());  
  }  
   
  if(pApp)  
  {  
  pApp->CbPort=3000;  
  pApp->CbServerName="139.24.254.12";  
  if(pApp->Connect())  
  {  
  printf("connect   ok.\n");  
  }  
  else  
  {  
  printf("connect   false.\n");  
  }  
  }  
  CoUninitialize();  
  2)如何处理控件的事件?(这当然是在第一个已经成功的基础上)  
  请高手指点!!! 问题点数:0、回复次数:8Top

1 楼zhushizu(从来就没有救世祖)回复于 2004-09-01 13:30:50 得分 0

是呀,我也是想了好久。。关注中。。。Top

2 楼impossible()回复于 2004-09-01 13:48:46 得分 0

CreateInstance成功了吗?如果成功了,那我不知道为何?  
  如果没成功,那还是注册出现错误,组件需要licence吗?  
  第二个问题你看一下联结点,链接点容器,出接口Top

3 楼nokialiu(一笑而过)回复于 2004-09-01 14:45:45 得分 0

就是CreateInstance返回“类未注册”错误。  
  注册没有出现错误,而且也不需要license.  
   
  好郁闷,希望大家一起关注...Top

4 楼skyxie(黑白精灵)回复于 2004-09-02 00:10:31 得分 0

就是CreateInstance返回“类未注册”错误。  
  ______________________________________  
  你注册该ocx了吗?  
   
  在命令行中输入regsvr32.exe   path_name_of_your_ocx.ocx注册该ocx  
  或者写代码调用该ocx的DllRegiserServer函数注册Top

5 楼skyxie(黑白精灵)回复于 2004-09-02 00:53:40 得分 0

这样试试呢  
  HRESULT   nRet;  
   
   
  CLSID   clsID;  
  HRESULT   hr;  
   
  hr=   CLSIDFromProgID(OLESTR("YourSvr._DESP"),   &clsID);  
  if(FAILED(hr))  
  {  
        AfxMessageBox("Retrieval   of   ProgID   failed");  
        return   FALSE;  
  }  
   
  _DESPPtr   pApp;  
  try  
  {  
  nRet=pApp.CreateInstance(   clsID   );  
  }Top

6 楼Cline(营营[无意苦争春,贯看群芳谢])回复于 2004-09-02 15:16:35 得分 0

"nRet=pApp.CreateInstance(__uuidof(_DESP)); "  
  可能你的_DESP是一个接口,你传了一人接口的ID.   这儿需要CLSID.  
   
  把你的DEBUG\*.tlh贴出来看看就是明白了.Top

7 楼nokialiu(一笑而过)回复于 2004-09-03 10:59:48 得分 0

idl中接口声明如下:  
  [  
              uuid(DDD90141-8FE4-11D5-BAA6-000476208700),  
              helpstring("CSTA1EventProvider   Control"),  
              control  
          ]  
          coclass   CSTA1EventProvider   {  
                  [default]   dispinterface   _DESP;  
                  [default,   source]   dispinterface   _DESPEvents;  
          };  
   
   
  tlh中_DESP的定义是这样:  
  struct   __declspec(uuid("e56666c4-4f59-11d5-9e0a-000102a3fe41"))  
  _DESP   :   IDispatch  
  {  
          //  
          //   Property   data  
          //  
   
          __declspec(property(get=GetCbPort,put=PutCbPort))  
          short   CbPort;  
          __declspec(property(get=GetCbServerName,put=PutCbServerName))  
          _bstr_t   CbServerName;  
   
          //  
          //   Wrapper   methods   for   error-handling  
          //  
   
          //   Methods:  
          long   Connect   (   );  
          IServiceRequestPtr   CreateServiceRequest   (   );  
          IStringParameterPtr   CreateStringParameter   (   );  
          IIntParameterPtr   CreateIntParameter   (   );  
          IULongParameterPtr   CreateULongParameter   (   );  
          IByteParameterPtr   CreateByteParameter   (   );  
          IComposedParameterPtr   CreateComposedParameter   (   );  
          IListOfParametersPtr   CreateParameterList   (   );  
          HRESULT   Disconnect   (   );  
          long   PostRequest   (  
                  struct   IServiceRequest   *   pServiceRequest   );  
          IServiceResponsePtr   SendRequestAndWaitAnswer   (  
                  struct   IServiceRequest   *   pServiceRequest   );  
          IServiceResponsePtr   CreateServiceResponse   (   );  
          HRESULT   PostResponse   (  
                  IDispatch   *   pServiceResponse,  
                  long   InvokeID   );  
          HRESULT   AboutBox   (   );  
   
          //   Properties:  
          short   GetCbPort   (   );  
          void   PutCbPort   (   short   _val   );  
          _bstr_t   GetCbServerName   (   );  
          void   PutCbServerName   (   _bstr_t   _val   );  
  };  
   
  SKYXIE的方法还是行不通啊。Top

8 楼wangweixing2000(星(inspiration(灵感)))回复于 2004-09-03 13:58:22 得分 0

nRet=pApp.CreateInstance(__uuidof(_DESP));  
  肯定是你的clsid给错了!hoho!Top

相关问题

  • 提示“类未注册”???
  • 已注册mswinsck.ocx文件,为何还提示类别未注册?
  • 注册dialog类时出现这样的错误提示
  • Midas问题,提示"类没有注册"。急,在线等。
  • 为什么安装程序时候总是提示msado20.tlb注册失败??
  • 谁有SetupBuilder Professional 1.50sc(sp6)的注册码?还有的用注册的是opq98这个,总是提示9828错误?
  • 刚学com编程,提示“没有注册类别”?是怎么回事?
  • 编译servlet类总是提示找不到包???
  • 为什么总是提示数据类型不匹配?
  • 为何打开注册表总是提示失败? sdk程序 帮忙看一下

关键词

  • 注册
  • 控件
  • 接口
  • hr
  • desp
  • papp
  • createinstance
  • nret
  • ocx
  • clsid

得分解答快速导航

  • 帖主:nokialiu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo