我有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所在的文件夹。
答案 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告诉编译器稍后将通过动态链接导入该函数。