问题定位:源代码是在32位的win8上编译的,在32位的XP 和win 7下运行调用迅雷没问题,但有用户表示在64位的机器上无法正常调用迅雷。
经查,在64位的机器上的确无法调用迅雷,日志文件显示,要调用的com组件没有注册。但测试的win2008上的迅雷是正常的,排除迅雷的问题。
StackOverFlow网站上的一个问题提醒了我,64的平台可能跟32位的com接口不匹配!(http://stackoverflow.com/questions/14141616/regsvr32-file-was-loaded-but-the-entry-point-dllregisterserver)
后又查资料得知,VS默认的编译平台是AnyCpu,意思是编译出来的程序包含两套运行逻辑。例如,我机子是32位的,如果以AnyCpu的方式编译,编译出的程序如果运行在32位的windows上则是以32位的方式运行,但如果你是64位的机器,那么就会以64位的方式运行。(http://www.cnblogs.com/tingfeng/articles/1943646.html)
这样的逻辑似乎没有什么问题,但问题是在我的程序中默认调用的是32位的迅雷Com组件,也就是说,在64位的机器上,我是以64位的方式调用32位的Com组件,这就是问题的根源。
了解了问题的根源,解决方案就很简单的了,将VS的目标编译平台改为x86,也就是说即使在64位的机器上仍然以32位的方式运行。
问题解决。
PS:虽然问题解决了,但是我在尝试在32位的机器上并不能不能添加64位的com组件引用,这是不是说无法在32位的机器上调用64位com组件,生成64位的应用程序了呢?