我一直在测试具有多个项目设置的东西,其中控制台应用程序从多个DLL访问函数。
我考虑过如何在控制台应用程序中包含DLL的头文件。我目前的实现如下,但管理起来很麻烦,甚至有时会遇到错误:
在我开始重载运营商之前一切正常。 我相信悲伤是由预编译的标题以某种方式引起的,这是我当前使用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;
有了这个,我有时会得到一些不相关的随机编译器错误,我可以通过从“主标题”中排除标题并在控制台应用程序中单独包含麻烦制造者来解决问题。
建议什么可以做得更好?
答案 0 :(得分:4)
__declspec(dllexport)
和__declspec(dllimport)
定义应放在每个公共Dll包含文件中,或至少放在主Dll公共包含文件中,其中包含所有其他文件。这些定义不应该在stdafx.h
。
#define DLL // Found in every DLL, not in the console project
这是不正确的,每个Dll必须具有唯一的预处理器定义。在你的情况下,一个Dll依赖于另一个,它总是将另一个Dll函数编译为__declspec(dllexport)
确保每个标头的开头都有#pragma once
。
考虑对所有项目使用通用Include
目录。
正如评论中已经提到的,using namespace
只能在源文件中使用。
答案 1 :(得分:0)