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

nokialiu 2004-09-01 11:54:35
我有一个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)如何处理控件的事件?(这当然是在第一个已经成功的基础上)
请高手指点!!!
...全文
442 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nokialiu 2004-09-03
  • 打赏
  • 举报
回复
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的方法还是行不通啊。
wangweixing2000 2004-09-03
  • 打赏
  • 举报
回复
nRet=pApp.CreateInstance(__uuidof(_DESP));
肯定是你的clsid给错了!hoho!
skyxie 2004-09-02
  • 打赏
  • 举报
回复
这样试试呢
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 );
}
skyxie 2004-09-02
  • 打赏
  • 举报
回复
就是CreateInstance返回“类未注册”错误。
______________________________________
你注册该ocx了吗?

在命令行中输入regsvr32.exe path_name_of_your_ocx.ocx注册该ocx
或者写代码调用该ocx的DllRegiserServer函数注册
Cline 2004-09-02
  • 打赏
  • 举报
回复
"nRet=pApp.CreateInstance(__uuidof(_DESP)); "
可能你的_DESP是一个接口,你传了一人接口的ID. 这儿需要CLSID.

把你的DEBUG\*.tlh贴出来看看就是明白了.
nokialiu 2004-09-01
  • 打赏
  • 举报
回复
就是CreateInstance返回“类未注册”错误。
注册没有出现错误,而且也不需要license.

好郁闷,希望大家一起关注...
impossible 2004-09-01
  • 打赏
  • 举报
回复
CreateInstance成功了吗?如果成功了,那我不知道为何?
如果没成功,那还是注册出现错误,组件需要licence吗?
第二个问题你看一下联结点,链接点容器,出接口
zhushizu 2004-09-01
  • 打赏
  • 举报
回复
是呀,我也是想了好久。。关注中。。。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧