最近在公司做了个ActiveX插件嵌在Web系统中,用到了SQLite数据库,
因为是在PC机开发,用的是32位的System.Data.SQLite.dll,
但是最近遇到问题了,在Windows 2008 Server中部署系统之后,
安装ActiveX插件之后,在使用SQLite时报错,诸如“加载失败”之类。
后来手动替换64位的System.Data.SQLite.dll后才暂时解决这个问题。但是如果部署了系统之后,访问系统的有32位系统,有64位系统,如何解决这个问题啊?
安装ActiveX插件都是安装在本地的,64位系统就不能加载32位的程序集了。
如何在64位系统加载32位DLL程序集呢?在此之前也网上查了好多资料,说了几种“解决方法”,
1.在编译时目标平台由 any CPU 改为 x86
2.将32位的System.Data.SQLite.dll复制到64位系统的C:\Windows\SysWOW64,
  然后在cmd中 regsvr32 System.Data.SQLite.dll等等,试过了都不行,求助各位大大!!!

解决方案 »

  1.   

    将32位的System.Data.SQLite.dll复制到64位系统的C:\Windows\SysWOW64,
      然后在cmd中 regsvr32 System.Data.SQLite.dll
    注册32位DLL后请使用32位的IE尝试,在Program(x86)文件夹下的
      

  2.   

    to 3L在注册dll的时候直接是报错的,说找不到什么什么入口的
      

  3.   

    控件不是COM控件吧 不能注册 你做的DLL步骤出问题了吧
      

  4.   

    你实在不行可以去下个capicom试试 这个是微软的COM控件 是32位的,注册之后你用32位IE判断下<object>的对象是不是为Null 不为Null的话就说明注册成功 
    当然,你如果觉得你的ActiveX控件没有问题,是64位机子的问题,你可以拿到32位机子去试下就知道了
      

  5.   

    现在是ActiveX控件是没问题的,在32位机器上OK,在64位机器上加载错误,
    手动换个64位的dll就可以了,我现在想让64位系统可以加载32位的dll,大家明白了没有啊?
      

  6.   

    64位的程序永远不能调用32位的dll,这是windows的安全机制,反之也一样。
    对于.net程序有另一个解决办法,就是把64位的转换成32位的,实际上是any cpu的转成x86的。
    详见我的博客http://blog.sina.com.cn/s/blog_4d2694ae0100nr97.html,这里有具体的使用方法。
      

  7.   

    “1.在编译时目标平台由 any CPU 改为 x86”这个是有用的,如果你的程序用不到 64bit功能的话 (如果你用sqlite的话,估计用不到x64) 直接编译成 x86的Binary就行了2.用Xenobuild或者Smartassembly 之类吧Dependency Merge到一个.exe文件里面去
      

  8.   

    呵呵,这个我在64位机子上用过32位的ActiveX,不过楼主的不知道什么情况
      

  9.   

    to 16L
    我也想动态加载的,可是把64位的dll放到setup里面都不能编译通过,这样只能手动放到安装目录下,这样的话我都不要动态加载了to 18L
    在64位机器上是能运行ActiveX插件,可是我这个插件还是用了别的dll程序,这个程序及分32位和64位的
      

  10.   

    在编译时目标平台由 any CPU 改为 x86,用这个方法是可以的。
    因为32位的可以在64位上运行。
      反之不可。我已用这种方法解决我的类似的问题。
     可能是你配置的不对吧。
    请再确认一下这个方法。
      

  11.   

    楼主,你那个文件名不带命名空间的吧,我想应该这样才是吧:
    regsvr32 C:\Windows\SysWOW64\SQLite.dll
      

  12.   

    to 20L
    等上班了再去试试这个to 21L
    文件名就已经带了命名空间的,其实regsvr32后面的整个就是文件名
      

  13.   

    是这样啊,那么你需要调用的dll本来就不是能够注册的com控件,当然注册失败,你需要做的是在ActiveX控件工程中用dllimorpt或者对应的调用dll方法调用就行了,根本就不需要注册,你先用一个命令行工程测试一下
      

  14.   

    ok,解决了,编译时目标平台由 any CPU 改为 x86 的确可以。之前是我自己搞错了,我只是把需要调用那个dll的工程改成x86了,其他的还是any CPU,因为我做了个系统的service,只改引用dll的工程以后,service用不了,呵呵,终于发现了。结贴!
      

  15.   

    今天我也遇到同样的问题。除非万不得已,我不会将 Any CPU 改为 x86,我还是想释出 x86 & x64 自适应的版本(因为我做的是共享软件,好多人有这种嗜好——我用 64 位 CPU、64 位 OS,我就要用 64 位应用才爽)目前有个解决方案(尚未测试):
    假设引用 DLL 为 a.dll,我打算在程序目录下放置 a.x86.dll 及 a.x64.dll,程序启动时,立即判断 OS 位数,32 位则将 a.x86.dll 复制一份,命名为 a.dll;64 位同理。这样,保证程序运行正常的同时又得到一个 x86 & x64 自适应版本,对共享软件来说,是不错的思路。不过,还没测试,呆会测一下看看。
      

  16.   

    有没有办法,不改Any CPU,调用32位的dll