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

标签 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 所在的文件夹。

最佳答案

创建一个宏,如下所示:

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

相关文章:

c++ - 间隔树 - 主要功能障碍的功能

vb.net - 从项目引用中获取类型出现在智能感知中的问题

visual-studio - 重命名 Visual Studio .NET 2008 C++ 项目

c++ - 将显示数组的 5 个 for 循环压缩为 1?

c++ - 轮询系统时间类型时发生无法解释的崩溃

c++ - universal dynamic_cast<void*> 等价于多态和非多态类型

c++ - 尝试使用/包含/编译第 3 方库 libmagic。 C/C++文件类型检测

c++ - 在 2D、z 顺序渲染系统中组合点(粒子)和三角形( Sprite )

c - 未初始化的变量如何获得垃圾值?

VSTS : Different checksum values given for '*.g.cs' Files 的 WPF 警告