Konwertuję bibliotekę statyczną opartą na ATL na bibliotekę DLL i otrzymuję następujące ostrzeżenie na temat wszystkich wyeksportowanych klas, które używają klasy ATL CString
(znaleziono w atlstr.h):Ostrzeżenie C4251 podczas budowania biblioteki DLL, która eksportuje klasę zawierającą element ATL :: CString
warning C4251: 'Foo :: str_' klasę 'ATL :: CStringT' musi mieć dll interfejs do stosowania przez klientów klasy 'Foo'
Poprawnie deklaruję klasę Foo
jako e xported przez __declspec(dllexport)
. Czy to ostrzeżenie, które mogę bezpiecznie zignorować, czy też robię coś nie tak? Ustawienia projektu DLL są ustawione tak, aby dynamicznie łączyły się z ATL, ale nie wydaje się to mieć żadnego znaczenia.
Na przykład:
#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
};
Wszyscy klienci tego DLL będzie również przy użyciu ATL.
Jeśli jesteś w stanie zapewnić zarówno bibliotekę, a klient jest zbudowany na dokładnie tej samej wersji biblioteki ATL, niż można go zignorować. –