我用VS2005 编写了一个ATL activex控件, 并且写了一个测试脚本。这个控件是由原来的一个BCB写的控件改过来的。原来那个没有问题,但是现在这个用VC写的,却在IE下无法加载成功。
具体的情况是这样的,我直接用IE打开网页,就是直接在文件目录里打开,比如C:\TestCtrl.html,看见IE8中的那个开发人员工具中,控件的object项是有的,就是我的控间接口类,也就是说这种情况下是正常的。
但是,我用IE去访问本地的apache目录下的测试网页,就是http://127.0.0.1/TestCtrl.html,那个object项是NULL,结果调用接口时IE就报错,说是对象不支持此方法或属性以下是我的测试网页:
<HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="javascript">
function TestUpload()
{
  UploadBlob.SetParam("URLPath","http://10.0.95.5/");
}
</script>
</head>
<H1> This is a test page for UploadCtrl.</H1><p>
Version 1.0. Data: 2010/9/30
<HR><center><P>
<body>
<OBJECT classid="CLSID:34496F16-FE1B-4B3F-82AB-91D7B6782E05"  codeBase="http://127.0.0.1/UploadCtrl.cab#Version=1,0,0,1" id="UploadBlob"></OBJECT></br>
</br>
<button onclick="TestUpload()">上传大附件</button>
</body></HTML>还有inf文件:
[version] 
signature="$CHICAGO$"
AdvancedINF=2.0  [Add.Code]
UploadCtrl.dll=UploadCtrl.dll[UploadCtrl.dll]
file-win32-x86=thiscab
clsid={34496F16-FE1B-4B3F-82AB-91D7B6782E05} 
FileVersion=1,0,0,1
RegisterServer=yes; end of INF file
还望各位高手指点迷津

解决方案 »

  1.   

    你这个UploadCtrl.dll有没有依赖别的库? 你先直接在本地注册一下看看,regsvr32 UploadCtrl.dll
      

  2.   

    后来我改过了一下JS,直接new一个控件的object,这样就可以调用控件接口了代码如下:
    <HTML>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script language="javascript">
    function TestUpload()
    {
      UploadBlob.SetParam("URLPath","http://10.0.95.5/");
    }
    function test1()
     {
                try { 
                   //这是从代码中创建ActiveX的实例
                   var myobject = new ActiveXObject("UploadCtrl.Upload");
                   if (myobject) {
                      myobject.SetParam("123456", "123456");
                   }
                   else
                      alert('插件实例化失败。。');
                }
                catch(e)
                {
                   alert(e.message);
                }       }
    </script>
    </head>
    <H1> This is a test page for UploadCtrl.</H1><p>
    Version 1.0. Data: 2010/9/30
    <HR><center><P>
    <body>
    <OBJECT classid="CLSID:34496F16-FE1B-4B3F-82AB-91D7B6782E05" codeBase="http://127.0.0.1/UploadCtrl.cab#Version=1,0,0,1" id="UploadBlob"></OBJECT></br>
    </br>
    <button onclick="test1()">上传大附件</button>
    </body></HTML>这是为什么呢?难道object标签没有起作用?
      

  3.   

    CAB的问题,你的CAB通过IE没安装成功,可能是没打包好。先将你的控件全部删除,然后通过CAB来进行安装注册,访问如果还是XX,
    就是装不上,CAB问题,这时你单独运行那个网页文件也是不行的。
      

  4.   

    而你直接运行网页可以,是因为你的控件已经有注册过了。总之,先卸载该控件所有注册信息,通过CAB安装。
      

  5.   

    这个问题解决了,是因为安全控件(IObjectSafetyImpl)的问题,还有一个VS2005中一个链接库MSVCR80D.DLL在普通系统中不存在的问题诶太失误了