将我的.ocx和网页放在本机上,可以成功打开网页,并看到控件,
但将它们放到其它机器的共享目录下,就打不开,
如果卸载过,那么它会重新下载并注册,在ActiveX测试容器中可以对控件进行测试,
但网页就是看不到控件,一直显示:红方块,绿圆圈,蓝三角我控件中加入一些MessageBox,能发现在刷新时,调用了:
InitInstance()
CXXXCtrl()
在关闭网页时:
~CXXXCtrl()
ExitInstance();而在本机打开时:
InitInstance()
CXXXCtrl()
OnResetState()
OnCreate()
...

解决方案 »

  1.   

    如果只是想看效果的话可以在别人的机器上手动注册一下.
    (这样子还是不能运行的话,可能你不是以release模式发布的,或者系统缺少DLL.)
    如果你想让IE自动下载并安装你的OCX的话,需要打包成cab文件,并做正式的数字签名(正式签名需要收费的).
      

  2.   

    不是只想看看效果,是由于经过WoSign签名后仍不能正常显示后,我才做最简单的方式来测试(不签名,将IE安全级别调至最低)我用的是Debug版做测试,但所有测试机上多装有VC的,
    并且如果将网页和控件放在测试机器上,就很正常,
    但共享文件方式去打开别的机器上的网页,最多安装控件,但就是只显示红方块,绿圆圈,蓝三角, 并不是红叉。很郁闷!
      

  3.   

    忙了一些其它事情,
    昨天再看这个问题时,终于找着原因了:
    我在APP文件中,实现脚本和初始化安全时,将RegisterCLSIDInCategory等函数中REFCLSID传错了,我传的就是APP文件中定义的const GUID CDECL BASED_CODE _tlid = ...
    而实际应该是该控件自已的CLSID(对应XXXCtrl中IMPLEMENT_OLECREATE_EX的值).
      

  4.   

    总结一下:
    1、ActiveX控件要想可以在网页上使用,必须实现脚本和初始化安全。否则在较高版本的IE中无法打开。2、在公网上如果某些控件无法显示,可以将安全级别调至最低试试。但作为开发者,我们不能要求用户将它的安全级别调至最低,此时你唯一的选择便是数字签名。自已做的测试证书在公网上是不行的,你必须出money购买全球通用数字证书。
      

  5.   

    CSDN怎么还限制自已不能回复超过3条啊?
    只好自已先来顶一下了。
      

  6.   

    还有:
    3、ActiveX可以是ocx形式,也可以cab包形式。
       由于cab会进行压缩,比ocx小很多,所以建议打包成cab.4、制作成cab包时,如果只有一个ocx文件,可以不要.inf文件。5、cab包中的ocx、dll是否需要签名,还未验证。(签个名一定不会有问题)
      

  7.   

    关于自动升级:
    1、用户更新DLL的时候一定要关掉其他IE,停止使用控件,不然计算机会提示需要重启.
    2、网页脚本中的#version=,,,一定要和控件的版本号一致,且比上次版本号高就可以了.
    以下是一些讨论:
    http://topic.csdn.net/t/20061030/15/5119558.html