2009-10-25 181 views
13

我在VS2008中有一個Win32 DLL項目,它寫在少數的C模塊中。
因爲我希望能夠建立在VS2008以外,沒有依賴於VS2008,我已經產生了一個自定義的生成文件,它執行所有的構建和鏈接步驟。所有這些都設置得很好。我可以在Visual Studio中的單個項目中混合使用C++和C嗎?

現在我想添加一些C++模塊到這個DLL。 我修改了自定義生成文件,將.cpp模塊編譯爲C++,將.c模塊編譯爲常規C(/ Tc)。這一切都有效。它將所有東西鏈接在一起,沒有問題

我可以配置VS2008項目做同樣的事嗎?

我可以在同一個VS2008項目中混合C++和C嗎?

或者我需要一個自定義的構建步驟嗎?

謝謝。


ANSWER

我有VS2008項目設置爲編譯爲C.我需要改變它來編譯爲「默認」。右鍵單擊該項目,選擇屬性,然後...:

alt text http://i33.tinypic.com/qqsd8g.jpg

謝謝你,帕維爾。

+0

我只是從解決方案資源管理器「屬性」 - >然後編譯爲C代碼中選擇文件.c。它的工作:P – user956584 2013-05-02 13:07:31

回答

8

首先,如果你自己構建它,你甚至不需要/Tc-cl.exe使用文件擴展名來確定類型,所以.c文件默認編譯爲C,而.cpp和.cxx文件作爲C++。

對於VS項目,它以完全相同的方式工作,除了你不能覆蓋這種行爲(或者至少我不知道如何)。

+1

非常有幫助。結果發現VS中有一個選項來設置「編譯爲」選項,/ Tc,/ Tp或「default」之一。我已將它設置爲/ Tc。我需要將其重置爲「默認」。一個OK。 – Cheeso 2009-10-25 01:45:47

1

他們應該加上罰款,考慮到微軟C編譯器將編譯兩者。如果你將它們添加到項目中,它們會傳遞到cl - 我相信cl根據文件的擴展名選擇使用哪種模式。你正在使用.cpp,這很好。

總之:是的。

GCC也會這樣做,所以你的makefile應該是合理的可移植的。

+1

請注意,如果您正在使用'gcc'編譯C++,'gcc'可能不會在鏈接階段添加必要的庫。 C++程序的鏈接步驟必須始終使用'g ++',而不是'gcc' – bdonlan 2009-10-25 01:17:49

5

在同一個項目中混合使用C和C++絕對沒有問題。您只需要在C函數和C數據結構之間設計C和C++模塊之間的接口,然後確保這些接口函數在C++端說明符extern "C"的C++端聲明。

相關問題