我需要在这里读一些思想,因为我正在尝试做我不完全理解的内容。在Vista 64位上使用来自C#或VBS的32位COM对象并获取错误80004005
有一个32位应用程序(称为CQG的电子交易应用程序),它提供了一个用于外部访问的COM API。我有从Excel,.NET(C++,VB和C#)和shell VBScript访问此API的示例程序和脚本。我有这些.NET应用程序作为源代码和编译的可执行文件(32位,在Windows XP上编译)。
现在我有Windows Vista Home 64位,这让我的脑子旋转。 Excel示例工作得很好(在Excel 2003中)。编译的.NET示例可执行文件也可以工作。
但是当我试图运行.NET C#示例转换为Visual Studio C#Expression并编译时,或者运行VBScript脚本时,尝试创建对象时出现错误80004005。最初.NET应用程序也给了我80040154,但后来我想如何使它产生32位代码而不是64位,所以现在C#和VBScript应用程序中的错误是相同的。这就是我现在所取得的所有进展。
是的,我尝试从我的VBS上的SysWOW64文件夹运行32位版本的cscript.exe/WScript,但结果仍然是相同的(80004005)。
如何解决这个问题?我几乎准备好相信这实际上是不可能的,但事实上,Excel VBA的工作原理和在Windows XP上编译的.NET可执行文件运行得很好,这只会让我生气。应该有办法打败这个东西(可能只有Windows Vista开发人员都知道的一些秘密)!我会感谢任何帮助!
PS:我相信代码样本没有多大意义在这里,但这个是VBScript中的线,失败:
Set CEL = WScript.CreateObject("CQG.CQGCEL.4.0", "CEL_")
这是C#:
CQGCEL CEL = new CQGCEL();
更新:忘了当然,说UAC已关闭。我正在从管理员权限开始工作。
我也试着看使用Process Monitor读取哪些注册表键,但对于这个对象的GUID,一切看起来都不错。我无法识别其他一些GUID,所以我不确定他们是否批评。
这个COM对象有没有可能使用Internet Explorer并得到错误的(如Internet Explorer 7而不是Internet Explorer 6引擎或其他东西)?
你有没有想过这个? – 2009-03-26 16:43:20