0

我有 xh 文件和 yh 文件,zc 文件。zc 包含 yh 和 yh 包含 xh 我有一个函数需要在 xh 中声明并在 zc 中定义,因为它需要使用 yh 中的一些其他函数

我试过这样

// 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

现在在一个 ac 文件中的其他项目 a_b 中,我试图包含 xh 并调用 foo(); 编译得很好,但我遇到链接器错误 lnk2019 和 lnk1120 未解析的外部符号

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

4

1 回答 1

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

并将其放在每个人都包含的一些标题中。然后在 xh 中:

DLL_IFACE int foo();

然后在 zc 中,使用以下命令启动该文件:

#define DLL_IFACE_EXPORT

当您构建定义函数的 dll 时,这将导致函数被声明为“_declspec(dllexport)”。并且会导致该函数在其他 dll 中被声明为“_declspec(dllimport)”。

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

于 2012-07-11T00:50:48.840 回答