gpt4 book ai didi

c# - 在 Vista 64 位上使用来自 C# 或 VBS 的 32 位 COM 对象并出现错误 80004005

转载 作者:行者123 更新时间:2023-11-30 12:19:10 25 4
gpt4 key购买 nike

我需要在这里读心术,因为我正在尝试做我不完全理解的事情。

有一个 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# Expression 转换和编译的 .NET C# 示例,或运行 VBScript 脚本时,我在尝试创建对象时收到错误 80004005。最初 .NET 应用程序也给了我 80040154 但后来我想出了如何让它生成 32 位代码而不是 64 位代码,所以现在 C# 和 VBScript 应用程序中的错误是相同的。这就是我目前取得的所有进展。

是的,我尝试从我的 VBS 上的 SysWOW64 文件夹运行 32 位版本的 cscript.exe/WScript,但结果仍然相同 (80004005)。

如何解决这个问题?我几乎已经准备好相信这实际上是不可能的,但是 Excel VBA 可以工作并且在 Windows XP 上编译的 .NET 可执行文件运行良好这一事实让我很生气。应该有办法解决这个问题(一些可能只有 Windows Vista 开发人员知道的 secret )!我将不胜感激任何帮助!

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 引擎或其他东西)?

最佳答案

对于 64 位机器,您必须记住许多事项。这些是过去让我感到困惑的一些事情。

  1. .NET 中的任何 CPU 构建方法它将在 64 位上以 64 位运行机器。
  2. 很多 COM 组件似乎只有 32 位(我知道这个是一种概括,但通常是案子)。为了使用它们,你需要将您的应用程序构建为 32位(x86)。
  3. 64 位 Windows 有不同的 32 位和 64 位注册表节点。例如,如果你运行regedit 为 64 位,你会看到HKLM\Software\Wow6432Node 和HKCU\Software\Wow6432Node.这包含 32 的所有信息位应用。

我的建议是构建一个 32 位应用程序,看看会发生什么。

关于c# - 在 Vista 64 位上使用来自 C# 或 VBS 的 32 位 COM 对象并出现错误 80004005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/396933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com