Заголовки dll C ++ MSVS #include проблемы - PullRequest
0 голосов
/ 23 октября 2010

Я не пишу код с помощью lib linking и dll большую часть времени, недавно, когда я это сделал, я понял, что может быть что-то очень не так с тем, как я делаю # include.

Является ли следующий правильный / желательный способ сделать #include?

предположим, у меня есть 3 проекта (1) dll_A (2) dll_B (3) exe_1. dll_A зависит от dll_B, exe_1 зависит от одного dll_A.

мой #include выглядит следующим образом:

dll_B.h ----> no dependency
dll_B.cpp -----> #include dll_B.h
dll_A.h -------> #include dll_B.h
dll_A.cpp -------> #include dll_A.h
exe_1.h --------> #include dll_A.h

Отсюда видно, что exe_1.h косвенно включает dll_b.h, что для меня немного плохо, потому что я хочу, чтобы exe_1.h не зависел от dll_b.h ... но я не уверен, что это возможно потому что как exe_1 может ссылаться на dll_b?

РЕДАКТИРОВАТЬ: Пример зависимости

// dll_B.h
struct dataB{};

// dll_A.h
#include dll_B.h
dataB* A_function_ptr(); // (any difference for implementing PIMPL?)
dataB& A_function_ref();
dataB A_function_copy();

// exe_1.cpp
#include dll_A.h
// ... it seems naturally #include-sion of dll_B.h is necessary? Can it be avoided?

1 Ответ

1 голос
/ 23 октября 2010

Если dll_B - это просто деталь реализации dll-A, то не включайте [dll_B.h] из [dll_A.h], просто включите его из [dll_A.cpp].

Как избежатьзависимость заголовка может потребовать небольшой доработки.

Например, вы можете подумать о идиома PIMPL для [dll_A].

Более подробную информацию невозможно сформулировать, не зная больше деталей...: -)

Cheers & hth.,

PS: Связывание не имеет ничего общего с заголовочными файлами, за исключением того, что в некоторых компиляторах Windows (особенно MSVC) заголовочный файл может содержать#pragma, который вызывает автоматическое связывание с правильной библиотекой.

...