gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:59:28 25 4
gpt4 key购买 nike

我有 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

并将其放入每个人都包含的 header 中。然后在x.h中:

DLL_IFACE int foo();

然后在 z.c 中,以以下方式启动该文件:

#define DLL_IFACE_EXPORT

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

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

关于c++ - 调用头文件中声明的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com