2009-10-05 148 views
0

我有一個在開發環境下使用C/C++創建的現有項目。 目前我們想要使用Window Forms應用程序對現有表單進行整形,但問題是現有項目使用Common Runtime Library = No/CLR和Runtime Library =/MTd。如何在C/C++應用程序中使用Windows窗體?

但是Windows窗體應用程序正在使用Common Runtime Library =/CLR和Runtime Library =/MDd。 請指教是否可以使用Windows窗體應用程序在現有項目中創建窗體?
有沒有關於這個的任何教程?

從MSDN的評論是: -

注意不要混用靜態和運行時 庫 動態版本。在進程 中運行時庫有多個副本 可能會導致問題,因爲一個副本中的靜態 數據不會與另一個副本中的 共享。鏈接程序可以防止 與一個.exe文件中的靜態和 動態版本鏈接,但您仍然可以以運行時 庫的兩個(或更多 )副本作爲結果。例如,與靜態 (非DLL)版本的運行庫 庫鏈接的動態鏈接 庫在使用 時可能會導致出現問題,其中.exe文件與 鏈接的動態(DLL)版本 運行時庫。 (你也應該避免 混合一個 過程中的調試和非調試 版本的庫。)
http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS.71).aspx ..

回答

1

簡單的答案是否定的。更準確的答案是有點,但你可能不會想。

可能爲您的用戶界面使用Windows Forms(即託管代碼)以及您的域邏輯的其他內容(例如非.NET /非託管代碼)。不過,我猜如果你問這個問題,那麼你現在要做的有點多。

我建議你用Windows窗體創建一個用戶界面,然後讓該用戶界面調用一個本地C/C++ DLL。 Google for PInvoke介紹如何從託管(.NET)代碼調用非託管dll(C/C++)。

如果你這樣做,那麼你會更好地回答這個問題。

+0

現在的問題是我無法將靜態和動態版本的run-時間庫。有什麼建議我怎麼能混合運行時庫? – Jenuel 2009-10-05 07:51:06

+0

你爲什麼要混合它們?我不認爲你這樣做。我想你可能會在c/C++運行時庫和.Net運行時間之間感到困惑。他們是完全獨立的東西。 「Common Runtime Library」是.Net,與使用/ MDd或/ MTd指定的其他運行時庫不同。 – 2009-10-05 22:42:41

0

我公司的軟件通常必須具有混合託管和非託管代碼和用戶界面的模塊。我們所做的就是將這些模塊分離成它們自己的可執行文件,並將這些功能作爲COM本地服務器對象公開。這樣,非託管代碼可以具有用託管代碼編寫的用戶界面。

但是,你需要做很多管道工作才能使其工作。我們這樣做是因爲我們的應用程序已經在現場部署了多年,並且需要花費數年的時間才能將整個程序改造成.NET。

+0

它看起來很有趣。我在哪裏可以找到有關使用COM的教程? COM可以鏈接運行時庫的靜態和動態版本嗎? – Jenuel 2009-10-05 07:52:08

+0

有很多關於COM的教程,你可以從谷歌獲得。它是一個相當大的主題,因此您可能需要查找COM LocalServer教程。它很可能被覆蓋爲DCOM。如果你使用LocalServer,每個模塊都可以是它自己的EXE,所以你可以儘可能多地混合和匹配。 COM大多棄用WCF。我使用COM是因爲我有很多傳統的C++代碼,無法轉換爲.NET而不會導致巨大的成本。 – 2009-10-05 21:59:09

相關問題