2
我有一個dll內的C++類。std :: stringstream類需要有dll接口
在那個類中,我想將來自Curl回調的數據存儲到成員變量中。 我打算用像這樣一個字符串流:
void MyClass::CurlCallback(void * pvData, size_t tSize)
{
const char* data = static_cast<const char*>(pvData);
m_myStringStream << sata;
}
但是,當我在類中聲明的stringstream的,像這樣:
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沒有得到這個錯誤?
我認爲這是因爲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'是一個*類型*;不是一個變量)。你的類從你的DLL中導出(並推斷它的成員)。如果你願意的話,你可以旋轉一個皮條來抵消這個(看起來像你)。這是[**這個問題**]的副本(http://stackoverflow.com/questions/4145605/stdvector-needs-to-have-dll-interface-to-be-used-by-clients-of- class-xt-war),順便說一句。 – WhozCraig 2014-10-02 09:55:26