2011-01-27 105 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