【发布时间】:2014-10-02 09:43:08
【问题描述】:
我在 dll 中有一个 C++ 类。
在该类中,我想将来自 Curl 回调的数据存储到成员变量中。 我打算像这样使用字符串流:
void MyClass::CurlCallback( void * pvData, size_t tSize )
{
const char* data = static_cast<const char*>(pvData);
m_myStringStream << sata;
}
但是当像这样在我的类中声明字符串流时:
private:
std::stringstream m_myStringStream;
我收到以下错误:
Error 1 error C2220: warning treated as error - no 'object' file generated
Warning 2 warning C4251: 'MyClass::MyClass::m_myStringStream' : class 'std::basic_stringstream<_Elem,_Traits,_Alloc>' needs to have dll-interface to be used by clients of class 'MyClass::MyClass'
如何声明此字符串流而不出现此错误?
我认为这是因为 stringstream 是 C++ 变量,但 dll 需要 c 样式变量。
我已经调查过可能创建一个存储 xml 数据的类,如下所示:
class XMLData
{
public:
XMLData();
virtual ~ XMLData();
const char* GetXMLData() const { return xml; }
void Append( const char* xmlData ) { /*add xmlData to xml blah blah*/};
private:
//Add more here - to do
char* xml;
int length;
};
并声明它:
XMLData* m_xmlData;
最好的方法是什么??
【问题讨论】:
-
假设您在
MyClass类上标记了一个declspec(dllexport)属性,因为这将解释此消息。您的假设是错误的(std::stringstream是 type;不是变量)。您的类是从您的 DLL 中导出的(并通过推断其成员)。如果你愿意,你可以旋转一个粉刺来抵消这种情况(看起来你这样做了)。这是this question 的副本,顺便说一句。
标签: c++ c windows dll stringstream