gpt4 book ai didi

c++ - 从 DLL 中包含 header 的理想方式?

转载 作者:行者123 更新时间:2023-11-30 02:00:14 37 4
gpt4 key购买 nike

我一直在测试多个项目设置,其中一个控制台应用程序访问来自多个 DLL 的函数。

我考虑过如何在控制台应用程序中包含 DLL 的 header 。我目前的实现如下,但管理起来很头疼,甚至有时会出错:

  • 每个 DLL 项目都有一个名为“Include”的文件夹
  • 控制台应用程序项目引用每个 DLL 项目的 Include 文件夹(如 msdn guide to working with DLLs 所建议的那样)
  • 每个 DLL 项目都包含一个单独的 header ,其中包含该项目中的所有 header
  • 然后控制台应用程序 #includes 这些“主 header ”
  • 每个项目都使用预编译的 header “stdafx”,每个文件都#includes它。

在我开始重载运算符之前,一切都很好。我相信悲伤是由预编译的头文件以某种方式引起的,这是我当前使用 stdafx 的示例:

#define DLL // Found in every DLL, not in the console project

#ifdef DLL
#define DLLEI __declspec(dllexport)
#else
#define DLLEI __declspec(dllimport)
#endif

#include <iostream>
#include <vector>

#include "Include\Engine.h"

using namespace std;

有了这个,我有时会遇到一些不相关的随机编译器错误,我可以通过从“主 header ”中排除 header 并在控制台应用程序中单独包含麻烦制造者来修复这些错误。

有什么可以做得更好的建议?

最佳答案

__declspec(dllexport)__declspec(dllimport) 定义应该放在每个公共(public) Dll 包含文件中,或者至少放在主 Dll 公共(public)包含文件中,其中包括所有其他文件。这些定义不应在 stdafx.h 中。

#define DLL // Found in every DLL, not in the console project

这是不正确的,每个 Dll 都必须有唯一的预处理器定义。在您的情况下,一个 Dll 依赖于另一个 Dll,它总是将另一个 Dll 函数编译为 __declspec(dllexport)

确保每个 header 的开头都有 #pragma once

考虑对所有项目使用通用的 Include 目录。

正如评论中已经提到的,using namespace 只能在源文件中使用。

关于c++ - 从 DLL 中包含 header 的理想方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362364/

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