我在这里需要一些读心术,因为我正在尝试做我不完全理解的事情。
有一个 32 位应用程序(称为 CQG 的电子交易应用程序)为外部访问提供 COM API。我有从 Excel、.NET(C++、VB 和 C#)和 shell VBScript 访问此 API 的示例程序和脚本。我将这些 .NET 应用程序作为源代码和编译后的可执行文件(32 位,在 Windows XP 上编译)。
现在我有了 Windows Vista Home 64 位,这让我头晕目眩。Excel 示例工作得很好(在 Excel 2003 中)。编译的 .NET 示例可执行文件也可以工作。
但是,当我尝试运行转换为 Visual Studio C# 表达式并由其编译的 .NET C# 示例或运行 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 引擎或其他东西)?