c++ 中调用 ActiveX 控件的方法

hanyuxinting 2010-11-08 03:01:42
最近想用 c++ 实现对 ActiveX 控件的封装,方法如下:


HRESULT hr = ::CoInitialize(NULL);
ISelectDlg *pSelectDlg = NULL;

hr = ::CoCreateInstance(CLSID_SelectDlg,
NULL,
NULL,
IID_ISelectDlg,
(void**)&pSelectDlg);

if(REGDB_E_CLASSNOTREG == hr) {
// 程序进入这里。
MessageBoxW(NULL,L"REGDB_E_CLASSNOTREG ",L"Java Script 呼叫範例",MB_OK);
} else if(CO_E_APPDIDNTREG == hr) {
MessageBoxW(NULL,L"CO_E_APPDIDNTREG ",L"Java Script 呼叫範例",MB_OK);
}



其中 ISelectDlg 接口是要封装的 ActiveX 控件 中的接口。并且已经确定 ActiveX 控件已经注册。
但是还是返回“REGDB_E_CLASSNOTREG”这个错误。

请教大家,这是怎么回事。。
...全文
292 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanyuxinting 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ouyh12345 的回复:]

REGDB_E_CLASSNOTREG
A specified class is not registered in the registration database. Also can indicate that the type of server you requested in the CLSCTX enumeration is not registered or the valu……
[/Quote]

谢谢五岭~搞定。采用了进程内通信。
tubo_true 2010-11-08
  • 打赏
  • 举报
回复
问一下mfc的控件,
能用 hr = ::CoCreateInstance(CLSID_SelectDlg,
NULL,
NULL,
IID_ISelectDlg,
(void**)&pSelectDlg); ??
能用com ??
ouyh12345 2010-11-08
  • 打赏
  • 举报
回复
REGDB_E_CLASSNOTREG
A specified class is not registered in the registration database. Also can indicate that the type of server you requested in the CLSCTX enumeration is not registered or the values for the server types in the registry are corrupt.

调整一下DWORD dwClsContext,参数试试
hanyuxinting 2010-11-08
  • 打赏
  • 举报
回复
单独使用 ActiveX 控件接口是没有问题的。
ouyh12345 2010-11-08
  • 打赏
  • 举报
回复
在Activex tester container里测试过了吗?

3,245

社区成员

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

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