ATL编写的ActiveX控件,静态编译,在物理机上通过命令:regsvr32命令可以注册生成的控件,但是在虚拟机下就不行,不知为何,指导下。我是静态编译的,不会是什么依赖的DLL在虚拟机上没有吧。

解决方案 »

  1.   

    在虚拟机下注册不上,提示:LoadLibrary()失败-由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
      

  2.   

    这个是缺少依赖库吧,去windows日志查看器中看看错误提示的内容兴许有帮助.
      

  3.   

    谢谢,刚刚看了下,果然是MFC的运行时库没有包含进去,在工程属性中将"MFC的使用"改为在静态库中使用,就OK了。
    再问下,这样是把MFC的库静态编译进了控件的DLL中,那么如果我要用到第三方库(有dll和lib文件),如何设置把这个dll也静态编译进我的dll中呢,谢谢。
      

  4.   

    除非第三方库支持静态编译,否则只能将DLL一起打包。
      

  5.   

    再问下,如果MFC库必须是动态编译进控件的DLL中,那么打包的时候是不是必须将MFC的dll包含进去。具体是包含MFC的什么DLL。我看了依赖关系,但是加入那几个dll后,虚拟机还是不能加载
      

  6.   

    我用的是VS2008,已经将mfc90u.dll,msvcr90.dll,microsoft.vc90.CRT.manifest文件都包含进去了,但是还是注册不了。
      

  7.   

    mfc9的DLL不是简单拷贝就可以用的,用VC提供的redist安装包安装才可以,它们应该是被安装在 winsxs 文件夹里面的,需要修改版本映射表,所以最好采用安装方式,或者使用专业打包工具制作安装软件。
      

  8.   

    这样,那岂不是很难处理,如果发布dll的时候必须是动态编译MFC的库,那这样MFC的这些DLL还要用工具去安装