2011-01-27 108 views
1

我使用必须在64位Windows中运行的应用程序,并使用应在32位仿真模式下运行的OCX控件。我可以将此控件嵌入到Windows窗体控件库中,然后将此库的引用添加到主应用程序,以便为此控件设置另一个仿真模式,为另一个应用程序设置另一个模拟模式,但会产生另一个问题。在这种情况下,我得到一个错误“抛出了InvalidActiveXStateException类型的异常”。我试图使用这个Windows窗体控制库与也运行在x86中的项目,一切都很好。x86和x64中的编译项目问题

你知道我可以运行哪个应用程序,它包含两个或多个项目,一个项目将在x86中运行,另一个在x64中运行? (知道什么时候每个项目是在另一种模式下它找不到一些程序集)

回答

4

您不能在同一个进程中混合使用32位和64位代码。如果你绝对必须从一个64位应用程序运行这个32位控制,那么你需要做一个进程外服务器。虽然这可能是可行的,但我不认为这是微不足道的。

无论如何,你可能不需要这样做。由于64位Windows运行32位应用程序,您可以确保您的应用程序目标为x86而不是AnyCPU然后它将在64位Windows上运行。

0

我不是很确定这是你在找什么,但你可以创建两个项目为你的任何当前项目。

源代码位于其中一个对等中,X64或X86使用Visual Studio符号链接添加所有文件。

然后,您不需要维护重复代码,只需要为X86配置一个项目,并为X64配置一个项目等等。

当您尝试添加现有项目时,创建符号链接,然后按箭头并选择“添加链接”。

我发现这不是您的解决方案(并且几乎是错误的)。感谢评论者。

+0

不是他在找什么。有条件编译时,绝对没有理由创建两个单独的项目。此外,您错过了主要问题:64位模式应用程序无法在同一进程中运行32位代码。 – 2011-01-27 07:57:57

+0

那么有两个独立的项目的原因:如果你使用符号链接,它是一个项目,在另一个项目中进行镜像,仅用于编译。你迫切需要在各地使用大量条件编译指令(更简洁的代码)。如果你知道你需要在两种CPU中进行编译,它总是这样,为什么不呢?关于第二个事实,你是对的,我的解决方案不能解决64位处理器的处理需求。 – 2011-01-27 08:01:16