Io sono la conversione di una libreria statica ATL-based per una DLL e sto ottenendo il seguente avviso su tutte le classi esportate che utilizzano l'ATL CString
di classe (trovato in atlstr.h):Attenzione C4251 quando si costruisce una DLL che esporta una classe contenente un ATL :: CString membro
C4251 avviso: 'Foo :: str_': classe 'ATL :: CStringT' ha bisogno di avere dll-interfaccia da utilizzare dai clienti di classe 'Foo'
Dichiaro correttamente la classe Foo
come e xportato tramite __declspec(dllexport)
. È un avvertimento che posso tranquillamente ignorare o sto facendo qualcosa di sbagliato? Le impostazioni del progetto DLL sono impostate per il collegamento dinamico con ATL, ma ciò non sembra fare alcuna differenza.
Ad esempio:
#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
};
Tutti i clienti di questa DLL saranno anche utilizzando ATL.
Se siete in grado di garantire sia la biblioteca e il cliente è costruita contro la stessa versione della libreria ATL, di quanto si può ignorarlo. –