■■■■■求助:OCX注册失败!!!!!DllRegisterServer 失败.错误码:0x80040200.....谢谢~~~

superdbs 2007-11-16 10:48:32
问题是这样的:

我做了一个OCX,共享编译然后注册是可以的;
我缓冲静态编译,然后注册就不成功了.....提示信息就是:DllRegisterServer 失败.0x80040200....

我按照下面这篇文章试试了,也不行.仍然是那个错误....谢谢大家给点指导!!!

关于ActiveX控件不能注册的解决方案
发布日期:2007-11-9 13:32:25 点击次数:17

MFC中, 注册控件实际上是调用函数: DllRegisterServer(void),注册失败是因为下面这句函数调用失败:



if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))

return ResultFromScode(SELFREG_E_TYPELIB);



AfxOleRegisterTypeLib函数原型:

BOOL AfxOleRegisterTypeLib( HINSTANCE hInstance, REFGUID tlid, LPCTSTR pszFileName = NULL, LPCTSTR pszHelpDir = NULL );



第三个参数pszFileName指的是类型库(.TLB)文件的名称



当我们用向导生成MFC Activex工程时,IDE默认为工程名.TLB,所以编译后注册正常。但有时由于n多原因,AfxOleRegisterTypeLib 调用时并找不到TLB文件,于是就产生了诸如:






“SZXPlayer.OCX中的DllRegisterServer失败,返回代码是: 0x80040200”这样的错误提示。



这里有两个方案可以解决此问题

一.由于TLB是接口类库,我们只需要调用AfxOleRegisterTypeLib时显示指明类型库文件名即可,例:



if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid, "SZXPlayer.tlb"))

//if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))

return ResultFromScode(SELFREG_E_TYPELIB);



同时将.LIB文件复制到.OCX文件相同路径下。OK, 一切都正常了。



二.第一种方法显然不是最好的解决办法,这样的话控件都得带一个拖累(.TLB)了。根据通常的做法,我们可以把.TLB文件整个先写入到OCX文件中去。打开.RC文件,翻到最后,可以看到形如这样的内容:



#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3 resource.

//



/////////////////////////////////////////////////////////////////////////////

#endif // not APSTUDIO_INVOKED



我们在其中加上TLB类库的信息就OK了,如下所示:



#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3 resource.

//

1 TYPELIB "SZXPlayer.tlb"

/////////////////////////////////////////////////////////////////////////////

#endif // not APSTUDIO_INVOKED



最后保存.RC文件, 再打开工程编译。


...全文
8896 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
superdbs 2007-12-03
  • 打赏
  • 举报
回复
谢谢大家.这些天忙死了.忘了来结贴,不好意思...

那天我把所有的编译选项都重置了一下,居然可以注册了!!!!

但现在,又在一台机器上面发现不能注册!!!!郁闷死了!!!


用depends.exe打开看了.居然里面还应用MFC42.dll!!!!我可是静态编译的呀!!!怎么会还有有这个呢?


请高手指点呀!!!!
superdbs 2007-12-03
  • 打赏
  • 举报
回复
320KB左右的
jameshooo 2007-12-03
  • 打赏
  • 举报
回复
一个OCX使用MFC静态链接,你看看这个ocx有多大?如果放到网上让人下载,可不要吓死人
yxz_lp 2007-11-16
  • 打赏
  • 举报
回复
我做了一个OCX,共享编译然后注册是可以的;//注册过了吗? 反注册下,再试试。
ouyh12345 2007-11-16
  • 打赏
  • 举报
回复
最好是跟踪一下DllRegisterServer。
无论是共享链接还是静态链接,debug或release,都可以调试的。
release时指定/Zi(程序数据库)和生成调试信息。
在dll的工程里,设置属性或settings里的debug也,指定应用程序为regsvr32,指定工作目录和参数,
就可以调试了
ouyh12345 2007-11-16
  • 打赏
  • 举报
回复
http://www.codeguru.com/forum/archive/index.php/t-99309.html
http://www.differentpla.net/content/2007/01/regsvr32-exe-reports-error-0x80040200-on-windows-vista
ouyh12345 2007-11-16
  • 打赏
  • 举报
回复
http://www.codeguru.com/forum/archive/index.php/t-99309.html
http://www.differentpla.net/content/2007/01/regsvr32-exe-reports-error-0x80040200-on-windows-vista
yxz_lp 2007-11-16
  • 打赏
  • 举报
回复
我做了一个OCX,共享编译然后注册是可以的; //先把这个反注册掉,在试试
superdiablo 2007-11-16
  • 打赏
  • 举报
回复
用depends.exe看一下你依赖的dll有没有问题先

3,245

社区成员

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

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