Rob*_*Rob 21 c++ dll atl dllexport
我正在将基于ATL的静态库转换为DLL,并且在使用ATL CString
类(在atlstr.h中找到)的任何导出类上收到以下警告:
警告C4251:'Foo :: str_':类'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
};
Run Code Online (Sandbox Code Playgroud)
此DLL的所有客户端也将使用ATL.
Ofe*_*lon 18
这个帖子给出了我认为更好的答案,Doug Harrison(VC++ MVP):
当你在dllexported类Y中使用非dllexported类X时会发出[此警告].这有什么不好的?好吧,假设Y有一个内联函数y_f,它调用属于X的函数x_f,它也不是内联函数.如果在某个不静态链接X的客户端内部内联y_f,则链接将失败,因为将找不到x_f.
Yoc*_*mer 12
这个Microsoft页面帮助了我.
如何导出标准模板库(STL)类的实例化以及包含作为STL对象的数据成员的类