我需要在这里读心术,因为我正在尝试做我不完全理解的事情。
有一个 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 位机器,您必须记住许多事项。这些是过去让我感到困惑的一些事情。
- 为 .NET 中的任何 CPU 构建方法 它将在 64 位上以 64 位运行 机器。
- 很多 COM 组件 似乎只有 32 位(我知道这个 是一种概括,但通常是 案子)。为了使用它们,你 需要将您的应用程序构建为 32 位(x86)。
- 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/