问题如下:
    写了一个activex控件,调用另外一个helloword.dll,把它们都打包在一个CAB文件,然后在网页中嵌入这个cab文件。发现调用dll失败。在测试的时候,我用的是绝对路径,如:F:\\helloword.dll.但是这样写不行呀,其他电脑上没有这个dll。不知道怎么解决。请赐教。

解决方案 »

  1.   

    客户端是不可能下载下来这个DLL的。建议最好是把DLL代码移到OCX中。
    听说可以把DLL当做资源加入到EXE中。下面是别人说的,我没搞过,楼主有兴趣可以试试。把DLL当作自定义资源放到工程里。把资源段Section改成可执行。然后取资源位置。   
      把它传给GetProcAddress查找相应函数即可。
      

  2.   

    写inf文件,安装cab时让IE将dll也拷贝系统目录下。
      

  3.   

    DllMain被调用时记下传进来的HINSTANCE参数,这是自己的模块句柄
    GetModuleFileName 获得自己的文件完整路径
    去掉后面的文件名,就是自己所在的文件夹,再附加上同文件夹下其它的 DLL 名称,然后 LoadLibrary
      

  4.   

    自己根据dll相对关系,然后先GetModuleFilename获取当前路径,然后再拼接其他DLL路径
      

  5.   

    可以将DLL和OCX一起安装到客户端电脑上。
      

  6.   

    inf文件中加入了dll,还有alt90.dll。目前测试不了。cab安装在windows文件下,还是system32下?
      

  7.   

    这么没用的。如果在ie中得到的路径是ie所在的文件夹。
      

  8.   

    控件安装后都在这个目录下:C:\WINDOWS\Downloaded Program Files
    如果你inf里面是直接写的dll,没有目录,那dll路径就是C:\WINDOWS\Downloaded Program Files\helloword.dll
      

  9.   


    你测试过?还是真按照我说的来做的?
    GetModuleFileName传递的第一个参数是什么?你传递的是NULL吧,应该传第一步保存下来的模块句柄,得到的就是自己的文件路径。
      

  10.   

    路过看到楼上有人说道dll放到exe中,如果想采用exe的方式让用户一键安装的话,可以使用installshield将需要的dll,ocx等控件打包成exe。因为IE使用object标签加载控件相当影响性能,尤其你使用tiles时候把object的引用放在模版页面。