C++ 调用头文件中声明的函数

C++ 调用头文件中声明的函数,c++,c,visual-studio-2008,visual-c++,C++,C,Visual Studio 2008,Visual C++,我有x.h文件和y.h文件,z.c文件。z、 c包括y.h,y.h包括x.h。 我有一个函数需要在x.h中声明并在z.c中定义,因为它需要在y.h中使用一些其他函数 我试过这样做 // x.h int foo(); // y.h #include "x.h" // z.c #include"y.h" int foo() { blah; blah; return 1; } 这是一个完整的项目,比如说在x_y.dll中,它编译得很好,我有x_y.dll,x_y.lib 现在在

我有x.h文件和y.h文件,z.c文件。z、 c包括y.h,y.h包括x.h。 我有一个函数需要在x.h中声明并在z.c中定义,因为它需要在y.h中使用一些其他函数

我试过这样做

// x.h
int foo();

// y.h
#include "x.h"

// z.c
#include"y.h"
int foo() {
   blah;
   blah;
   return 1;
}
这是一个完整的项目,比如说在x_y.dll中,它编译得很好,我有x_y.dll,x_y.lib

现在在另一个项目a_b中 在其中一个a.c文件中,我试图包含x.h并调用foo(); 编译很好,但我有链接器错误lnk2019和lnk1120未解析的外部符号


我正在使用VS2008,我已将路径设置为x_y.lib所在的文件夹。

创建如下宏:

#ifndef DLL_IFACE
#ifdef DLL_IFACE_EXPORT
#define DLL_IFACE _declspec( dllexport )
#else  // !DLL_IFACE_EXPORT
#define DLL_IFACE _declspec( dllimport )
#endif // !DLL_IFACE_EXPORT
#endif // !DLL_IFACE
并把它放在每个人都包含的标题中。然后在x.h中:

DLL_IFACE int foo();
然后在z.c中,以以下内容开始该文件:

#define DLL_IFACE_EXPORT
这将导致在构建定义函数的dll时将函数声明为“_declspec(dllexport)”。并将导致函数在其他DLL中声明为“_declspec(dllimport)”


dllexport告诉编译器,给定的函数应该是dll公共接口的一部分。它将函数放入dll的动态符号表中。dllimport告诉编译器稍后将通过动态链接导入函数。

我的错误是lnk2019和LNK1120是否在项目设置中设置了库依赖项?是的,如果我有错误,请让我更正,右键单击项目->比例->常规->附加库目录:这里我有lib文件的路径,在“输入附加依赖项”下我有lib文件名,我不是MSVC专家,但函数不需要包含
\u declspec(dllexport)
要从DLL导出的声明?函数定义是否需要包括DLL_IFACE I是指DLL_IFACE int foo(){blah;blah;return 1;}