我用网上下的一个例子,VC++深入详解的ocx例子,都已经调用成功了。
但我调用公司给我的ocx,就是不成功。我是在注册表里搜我的ocx文件,然后拿那个文件夹节点上的值作为classid的。现在的问题是,我觉得加载是成功的,因为没有显示小红叉,但我想用调用ocx的方法,左下脚脚本错误,提示对象不支持属性或方法。
这个ocx肯定没什么问题的,在别的桌面程序中一直在用。这个方法肯定也是有的。我的js调用代码如下:
var o3DCtrl = document.getElementById("CITY3DCTRL1");
//alert("E:\\wujing\\data\\22.ive");
alert(o3DCtrl);
var a = o3DCtrl.LoadCITY3DFile("E:\\wujing\\data\\22.ive");
现在的问题是,这个ocx控件还依赖了很多别的dll,它们都和ocx在同目录下,但不在system32下面。这个ocx肯定也注册过了。
我不知道是不是这个原因造成的ocx方法调用不成功?
还是我的classid写错了?(因为classid是从注册表中找的,不是从程序中找的,我不知道这样找的对不对)
大家帮忙看看。

解决方案 »

  1.   

    用Dependency Walker看看有没有缺失DLL。
      

  2.   

    缺是不会缺的,这个控件在桌面程序中运行良好,我要调的函数,也是在别的桌面程序中能用的。现在是不能在网页中调用。
    我是这么想的,桌面程序需要把生成路径设到这个ocx目录下,很多它依赖的dll也在这个目录。但网页调用ocx时,怎么去搜索它依赖的dll呢,会到ocx同目录下面去找吗?还是只在system32下面找?
      

  3.   

    我把那个装ocx和许多dll的文件夹都拷到system32下面了,还是不行,郁闷啊。这个dll不会非要放根目录下面吧
      

  4.   

    放在本目录下就可以了,不必放到System32下。
      

  5.   

    OCX和被OCX调用的都放在SYSTEM32这个对的,关键是你调用的脚本的classid一定要对,还有就是OCX的接口你函数名有没有写对。这个我自己做过类似的OCX,这些都对了 应该是可以成功调用的
    <object id="xxxx" visible="false" classid="CLSID:1C62CC1F-43BC-4N04-B9CA-E64A197C5CCD" type="application/x-oleobject" width="0" height="0"></object>
    <script language="javascript">
    function FUN() {
           xxxx.INFO();//ocx可以调用的函数
    }
    </script> 
      

  6.   

    函数名绝对没错。
    问题就是我调用别的ocx也都成功了,classid我是通过注册表找的,应该也没错,因为我用其他ocx测试的时候,也通过注册表找过他们的classid,和程序里找的是对的上号的。
    有没有可能一个ocx本身的问题造成它只能在桌面应用程序中调用,不能在网页中调用?
      

  7.   

    可以先用微软的 ActiveX 测试工具测试一下。
      

  8.   

    我用VS2005带的ActiveX控件测试容器测试,控件没什么问题。难道classid错了?classid应该怎么找?现在写控件的人回家了过年去了,找不到人了,R了。没有源代码,能找到classid吗?
      

  9.   

    classid错了,我用ole viewer查看了控件的classid,然后再试,可以加载和调用部分方法,不过还有一点问题,再开一帖请教。