2009-10-25 47 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++端声明。

相关问题