我需要一些读心术,因为我正在尝试做我不完全理解的事情。
有一个32位应用程序(称为CQG的电子交易应用程序),它提供用于外部访问的COM API。我有从Excel,.NET (C++,VB和C#)和外壳VBScript访问此API的示例程序和脚本。我有这些.NET应用程序作为源代码和编译的可执行文件(32位,在Windows XP上编译)。
现在我有了64位的Windows Vista Home,这让我头晕目眩。Excel示例工作正常(在Excel2003中)。编译后的.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对象(例如Internet Explorer 7而不是Internet Explorer 6引擎或其他引擎)?
发布于 2008-12-29 07:12:43
对于64位机器,您必须记住许多事情。这些都是过去让我感到困惑的事情。
我的建议是构建一个32位的应用程序,看看会发生什么。
发布于 2010-08-20 10:14:14
问题可能出在DEP上。
我和你有完全相同的问题,并从CQG的技术支持中获得了一些帮助。默认情况下,Windows Vista和Windows 7会打开数据执行保护。您可以在命令提示符下使用admin权限将其关闭
bcdedit.exe /set {current} nx AlwaysOff稍后,如果需要,可以使用以下命令重新打开它
bcdedit.exe /set {current} nx AlwaysOn系统不会提示重新启动,但必须重新启动。您可以使用以下命令检查您的DEP策略
wmic OS Get DataExecutionPrevention_SupportPolicy其中0为Always off,1为Always On,2为Opt in (默认值),3为Opt Out。
在将我的代码更改为Always Off并重新启动后,我能够在不抛出80004005错误的情况下编译。
发布于 2008-12-29 02:21:58
下面是一些你可以尝试的有用的东西:
https://stackoverflow.com/questions/396933
复制相似问题