1

我们有一个用 C(不是 cpp)编写的大型静态库,其中包含如下定义的函数:

StructThing* __cdecl DoSomething(); // in header
StructThing* __cdecl DoSomething() { ... } // in .C file

在我们基于 C 的产品中使用它一切正常,但我们已经开始转向这个名为 c++ 的新事物!

但是当我们尝试在 cpp 文件中使用 DoSomething 时,我们会在链接时得到未解决的外部符号错误。

看来 cpp 编译器正在寻找函数的修饰版本。

我们如何使 cpp 编译器可以使用符号(函数)?最好不更改源库(太多),我的第一个想法是通过 .def 文件,但静态库解决方案似乎忽略了它(不确定是否适用于那种 vs 项目)

但这应该很容易,我假设 Windows API 是这样编写的。

任何人 ?

VS 2012 更新 3

TIA

4

3 回答 3

4

啊,它会出现“经典”

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
于 2013-08-23T11:33:52.407 回答
2

将头文件包装在extern "C"块中:

extern "C" {
    #include "dosomething.h"
}
于 2013-08-23T11:28:09.633 回答
1

将标头声明包装在一个extern "C"块中:

extern "C"
{
    StructThing* __cdecl DoSomething();
}
于 2013-08-23T11:28:10.837 回答