调用头文件中声明的函数

时间:2012-07-10 22:51:05

标签: 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

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

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

1 个答案:

答案 0 :(得分:0)

像这样创建一个宏:

#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

这将导致声明函数" _declspec(dllexport)"当你构建定义函数的dll时。并将导致函数被声明" _declspec(dllimport)"在其他dll。

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