Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;DLL头包括_C++_Visual Studio_Dll_Header Files - Fatal编程技术网

C++ C++;DLL头包括

C++ C++;DLL头包括,c++,visual-studio,dll,header-files,C++,Visual Studio,Dll,Header Files,我正在Visual Studio中创建一个DLL 我有3个自己的头文件,包括在DLL的头文件中。 我想扔掉3头文件,一旦他们在DLL内编译 我尝试了很多方法来实现这一点,但没有取得好的效果。当我从项目中删除3个头文件时,会出现头文件丢失的错误。编译并创建DLL DLL.h: #ifndef DLL_H #define DLL_H #include "header1.h" #include "header2.h" #include "header3.h" #endif 我在main.cpp中

我正在Visual Studio中创建一个DLL

我有3个自己的头文件,包括在DLL的头文件中。 我想扔掉3头文件,一旦他们在DLL内编译

我尝试了很多方法来实现这一点,但没有取得好的效果。当我从项目中删除3个头文件时,会出现头文件丢失的错误。编译并创建DLL

DLL.h:

#ifndef DLL_H
#define DLL_H

#include "header1.h"
#include "header2.h"
#include "header3.h"

#endif
我在main.cpp中包含了DLL.h,以使用包含的DLL和头文件

我还创建了一个DLL.cpp,但该文件为空


如何在Visual Studio中设置文件或设置,使头文件可以从DLL中识别,但头文件不存在?

如果这些头文件与DLL导出的API不相关,则不应将它们包含在DLL头文件中。 如果你真的想这样做,你可以用预处理器隐藏它们

#ifndef DLL_H
#define DLL_H

// You can set BUILDING_DLL=1 in only DLL project, 
// I assume that you already have such variable to determine 
// whenever to use  __declspec(dllexport) or  __declspec(dllimport)
#if BUILDING_DLL
#include "header1.h"
#include "header2.h"
#include "header3.h"
#endif

#endif

但我鼓励你核实一下是否需要。它会在没有这些头的情况下编译吗?如果愿意的话,您可以简单地删除它们并只包含在cpp文件中。若并没有,你们就不能删除它们,因为一旦你们想链接到DLL,编译器就必须知道来自这个头的API和ABI。例如,如果声明了用作函数参数的某个类型,编译器必须知道该类型。

头文件不“包含在DLL中”。它们的用途完全不同。编译器使用头文件;链接器和运行时使用DLL。你说的“扔掉”是什么意思?为什么要这样做?头文件是大多数C++项目的源代码的一部分。头文件仅由预处理器查看。您可以在CPP文件的属性中选择生成预处理文件,并检查实际传递给编译器的结果.i文件。编译器不知道如何处理#include。好的,我会更好地解释我的问题。这3个头文件包含main需要使用的变量。在第一个实例中,我在main中包含头文件,以便使用变量。现在我想创建一个DLL,这样它只需要编译一次,当其他用户想要使用此信息时,我可以向他们发送DLL,而不是3个单独的头文件。还是说DLL不是最好的方法?这是完全不同的问题。这是变量还是常量?我怀念这里的大形象。如果DLL应该替换头文件,听起来像是常量,但它们是运行时配置,对吗?DLL还可以,但我建议用函数、getter和setter包装这些变量。如果需要变量,则必须在main和dll中同时包含标题,但在dll和export中仅定义一次。每当您更改值时,只需构建新的DLL并发送它。()