【ocx疑难杂症0】浅谈OCX开发注册“逐用户重定向”问题

9 篇文章 0 订阅
3 篇文章 0 订阅

最近按公司要求封装一个OCX,本来很简单的一件事却遇到一个很奇怪的问题。

在编译器vs2010编译后注册报“逐用户重定向”

当时在莫度的带领下差点全军覆灭,提到2点解决方案(狗比膏药--坑的一逼)

1.改工程属性从DLL为lib


变成

这种方案虽然编译器是过去了但是regsvr32注册没一点反应。

2.改链接器配置


变成

这个更狠,编译器都过不了。

------------------------------------------------------------------------------------------------------

以上为爬坑分割线,下面来点干货

-----------------------------------------------------------------------------------------------------

当时调用其它的DLL动态库,还有OCX事件又是合作开发,没办法先缩小问题范围

把事件删了-----外甥打灯笼--照旧

把工程分割开 ---- 本人的没问题(当时高兴的有一种要甩键盘的冲动)

合作开发一个team不能拉下弟兄不管,就帮弟兄逐步缩减范围。。。。

直到我们注释了一个调DLL的函数(静态方式调用,及.h+lib)发现

成了。。。。真成了

解决方案1:

OCX工程中静态调用DLL的接口,且参数是函数指针 既有可能是这个原因


后面改成动态加载DLL(loadlibrary)解决了(此处爬坑double*4个人日)


解决方案2:

后面需要在OCX用到多线程,但多线程__stdcall方式来进行资源管理的,而在多线程方法里需要用到OCX事件,

当时脑袋一热不就是new个OCX的XXCtrl对象,然后对象.事件解决。(too young too simple)

JS崩溃了,JS崩溃了,JS真的无情的崩溃了(此处有n!+1个F**K)

开动小脑筋,多线程方法里不能NEW,设一个全局变量不就OK了

然后遇到了多年未见的老朋友(“注册失败  逐用户重定向),虽然才1天没见,但见到不希望见到的总感觉

快过了一辈子。

OCX工程代码重新new控制类对象   既有可能是这个原因

解决办法是:老子删了多线程代码,投入while大法的怀抱(此处有坏笑大笑

解决方案3:

依赖库不全或者位置不对。

32位系统:依赖库和配置文件放到c:\windows\system32\

64位系统:依赖库和配置文件放到c:\windows\syswow64\

今天编写OCX遇到这个问题,当时以为静态引用DLL,放到引用路径就好了,还有DLL依赖库也懒得放到syswow64(LZ64的系统)结果“逐用户重定向”。然后找全所有的依赖库和配置文件全放到syswow64就好了。

依赖的配置文件也不要偷懒,毕竟硬盘那么大一股脑全放进去吧。《保险才是最好的冒险》


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值