网上有类似的帖子,但好象都没有很好的解决问题,现在,再次提出,请大家帮忙。 
有一个mfc开发的activex控件,其中用LoadLibrary使用了一个第三方dll,包括Direct3d的。  
我希望客户端的浏览器能将ocx控件和dll一起下载并运行:  
我的INF文件配置如下: 
[version]    
signature="$CHINA$"  
AdvancedINF=1.0  
  
[Add.Code]    
display.ocx=display.ocx    
d3d9.dll=d3d9.dll
D3DX10d_38.dll=D3DX10d_38.dll
D3dx9d_38.dll=D3dx9d_38.dll
libmySQL.dll=libmySQL.dll   
mfc90ud.dll=mfc90ud.dll 
msvcp90d.dll=msvcp90d.dll
msvcr90d.dll=msvcr90d.dll
  
[display.ocx]    
file=thiscab    
clsid={4DE426ED-1271-451E-9E91-5F1B4692178B}    
FileVersion=1,0,0,0  
RegisterServer=yes    
  
[d3d9.dll]    
file-win32-x86=thiscab    
RegisterServer=no    
DestDir=11  
FileVersion=5.3.2600.2180 [D3DX10d_38.dll]    
file-win32-x86=thiscab    
RegisterServer=no    
DestDir=11  
FileVersion=9.23.949.2378 [D3dx9d_38.dll]    
file-win32-x86=thiscab    
RegisterServer=no    
DestDir=11  
FileVersion=9.23.949.2378 [libmySQL.dll]    
file-win32-x86=thiscab    
RegisterServer=no    
DestDir=11  
FileVersion=7,10,3052,4 [mfc90ud.dll]    
file-win32-x86=thiscab    
RegisterServer=no    
DestDir=11  
FileVersion=9.0.21022.8 [msvcp90d.dll]    
file-win32-x86=thiscab    
RegisterServer=no    
DestDir=11  
FileVersion=9.0.21022.8 [msvcr90d.dll]    
file-win32-x86=thiscab    
RegisterServer=no    
DestDir=11  
FileVersion=9.0.21022.8 
//控件名称:display.ocx , 个DLL的FileVersion,通过右击鼠标查看其版本得到。 
如果我手动将那个dll放到c:\winnt\system32则可以运行。 
问题: 
如果不通过手动添加DLL,只靠自动下载的话,有些DLL文件可以正常下载,如:libmySQL.dll。 
但是其他的都不能下载,请问这是怎么回事啊。 
注:客户端已经把服务器地址放入信任网站列表,安全级别已经放在最底了。

解决方案 »

  1.   

    第一:确认打包文件中确实有这几个东西;
    第二:DirectX是需要安装的,也就是说需要注册几个COM组件。
    第三:为什么要用Debug版的,不嫌累么?
      

  2.   

    1.文件里面确实有这几个东西。
    2.DirectX是不用安装的,因为我把所需要的DLL拷到刚装好的机器上,是可以运行的。
    3.呵呵,小弟刚接触这个东西,所以不熟悉,我很菜的
      

  3.   

    DestDir=11  
    不能指定安装目录的, ActiveX控件自动被下载到c:\windows\download\cache目 录中.AdvancedINF=2.0  
    改成2.0试下...
      

  4.   

    建议一下一个flash.cab研究研究,感觉你写的有些短,我写的两个dll都写和很长。dll是可以指定目录的。
      

  5.   

    关于指定目录, 不知道在vista下有测试过吗?我担心可能没权限copy文件到system32目录中,当然, 用户目录可能没问题.
      

  6.   

    对了,刚才我把所有的DLL都装有VC的电脑上了,可以运行。但是我COPY到没有VC的电脑上就运行不了了,请问,还有什么DLL必须的,而我没有加入的吗,呵呵,问题太烦人了。应该是缺少一些VC默认的DLL吧
      

  7.   

    mfc42.dll, mfcvcrt.dll, mfcvcp60.dll, 你用depend工具看下库依赖吧?
      

  8.   

    我用Depend工具查询的依赖项目如下:
    d3d9.dll
    D3DX10d_38.dll
    D3dx9d_38.dll
    libmySQL.dll   
    mfc90ud.dll 
    msvcp90d.dll
    msvcr90d.dllntdll.dll
    d3d8thk.dll
    msvcrt.dll
    rpcrt4.dll
    secur32.dll
    advapi32.dll
    comctl32.dll
    gdi32.dll
    kernel32.dll
    oleaut32.dll
    shell32.dll
    user32.dll
    这些是所有的依赖项目了,没有你提到的那几个啊。而且红色的貌似是系统的,我在刚装系统的电脑上找了一下,红色的都有。
      

  9.   

    oleaut32啊,这已经是所有的了,现在解决了DLL下载的问题。只剩不能在没装VC电脑上运行的问题了。
    嗨,
      

  10.   

    的确没测试过vista,在XP下也同样有这样的问题。不过指定目录是可以肯定地
    flash的目录在 WINDOWS\system32\Macromed\Flash下,都是自己指定的目录。
      

  11.   

    其中
    mfc90ud.dll 
    msvcp90d.dll 
    msvcr90d.dll 
    这3个dll是有版本限制的,你可以看看WINDOWS\WinSxS目录 manifests还有指定dll版本的作用。
    你要确定版本一致