从C ++代码中调用C函数

时间:2017-02-20 15:12:52

标签: c++

我试图从Visual Studio 2015中的C ++项目中调用C函数。我得到的错误是LNK2019“未解析的外部符号”

Error   LNK2019 unresolved external symbol _Hsusrt_getTxBuffer referenced in function "private: bool __thiscall hsbuf::TxHsusrtBuffer::getBuffer(void)" (?getBuffer@TxHsusrtBuffer@hsbuf@@AAE_NXZ)  inter_device_d3_r5  C:\[path]\build\test.obj

我有一个带有函数声明的.h文件和带有以下定义的.c文件。

NrcsDriver_HSUSRT_If.h:

//func prototype
void Hsusrt_getTxBuffer( ) ;

NrcsDriver_HSUSRT_If.c:

#include "NrcsDriver_HSUSRT_If.h"
void Hsusrt_getTxBuffer( ) 
{      
    //dummy func implementation here
}

我可以通过两种方式开展工作。一个是在C头文件

中附加C ++警卫的前后
//#ifdef __cplusplus
//extern "C" {
//#endif 

//func prototype
void Hsusrt_getTxBuffer( ) ;

//#ifdef __cplusplus
//extern }
//#endif 

其次,我可以在test.cpp中做一个标准的#include,没有任何特殊的外部“C”警卫

**test.cpp**

#include "NrcsDriver_HSUSRT_If.h" 

int main()
{
    Hsusrt_getTxBuffer(); //works fine
}

但是,当我将#include包装在.cpp文件中的extern“C”中时,我很困惑。我读过的所有内容都要求这是包含C标头的正确方法。然而,这是我的项目失败的技术。

**test.cpp**

extern "C" {
#include "NrcsDriver_HSUSRT_If.h"
} 

int main()
{
    Hsusrt_getTxBuffer(); //does not work
}

0 个答案:

没有答案