如何在具有依赖项的DLL中使用预编译头

时间:2019-09-05 21:29:36

标签: c++ dll linker precompiled-headers

我的情况:我正在写DLL,它有很多类,但是我只导出一个:

#pragma once

#ifdef APIDLL_EXPORTS
#define APIDLL_API __declspec(dllexport)
#else
#define APIDLL_API __declspec(dllimport)
#endif

class Process; // <-- ApiClient uses pointer to that class, so I forward declare it

class APIDLL_API ApiClient
{
    web::http::client::http_client client; // (*) line
public:
    void check(Process * p);
}

ApiClient.cpp中,我有#include "pch.h",即:

#ifndef PCH_H
#define PCH_H

// add headers that you want to pre-compile here
#include "framework.h"

#include <sstream>
#include <iomanip>

#include <cpprest/http_client.h>
#include <cpprest/json.h>
#include <cpprest/asyncrt_utils.h>

#endif //PCH_H

由于它是作为DLL编译的,因此当我将其链接到控制台应用程序时不会编译。我放在includes目录ApiClient.h中(因为我导出并且只需要这个)(。lib的路径正确)。我在(*)行E0276 name followed by '::' must be a class or namespace name中遇到错误。看来编译器看不到http_client的定义。因此,如果我在#include <cpprest/http_client.h>中添加ApiClient.h,一切都很好。

但是我想在'pch.h'中包含所有需要的依赖项。我也应该将其复制到includes目录吗?但是,如果我向pch.h添加一些相对路径,该怎么办?

0 个答案:

没有答案