Предупреждение C4251 при создании DLL, который экспортирует класс, содержащий ATL:: участник CString

Я преобразовываю основанную на ATL статическую библиотеку в DLL и получаю соблюдающее предупреждение на любых экспортируемых классах, которые используют ATL CString класс (найденный в atlstr.h):

предупреждение C4251: 'Нечто:: ул. _': класс 'ATL:: CStringT' должен иметь dll-интерфейс, который будет использоваться клиентами класса 'Foo'

Я правильно объявляю Foo класс, как экспортируется через __declspec(dllexport). Действительно ли это - предупреждение, что я могу безопасно проигнорировать, или я делаю что-то не так? Настройки проекта DLL установлены динамично связаться с ATL, но это, кажется, не имеет значения.

Например:

#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif

// This class is exported from the DLLTest.dll
class DLLTEST_API Foo
{
public:
 Foo();
 CString str_; // WARNING C4251 HERE
};

Все клиенты этого DLL будут также использовать ATL.

21
задан Rob 25 January 2010 в 14:04
поделиться

2 ответа

вот нить с хорошим обсуждением этого.

Короче говоря, компилятор предупреждает о том, что, по сути, ваш экспортируемый класс не отделяет интерфейс от реализации. Если ученики участников недоступны для клиентов, делают их частным и #PRAGMA Предупреждение для этого члена / класса. Если члены доступны и используются клиентами, вам нужно будет предоставить косвенный доступ к участникам посредством доступа и мутаторов.

7
ответ дан 29 November 2019 в 20:51
поделиться

Я обычно получаю это предупреждение, когда я делаю глупую ошибку в создании DLL с библиотекой Runtime One / MultiSticleded вместо односпальной / многопотативной обработки. Возможно, вы захотите проверить это в ваших настройках проекта.

0
ответ дан 29 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: