调用头文件中声明的函数

calling a function declared in header file

本文关键字:函数 声明 文件 调用      更新时间:2023-10-16

我有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告诉编译器该函数稍后将通过动态链接导入。