我知道这个问题已经多次以类似的方式被问过,但我并不肯定我已经完全掌握了这里涉及的概念。我目前正在做一些小的学习项目(因为我不久前停止使用 C++ 并想重新开始使用它),从我读到的内容来看,在 DLL 中使用 STL 时存在一些问题.
但是,根据我收集到的信息,有两种方法可以避免可能出现的问题。
方法 1:DLL 的用户必须具有相同的编译器和相同的 C 运行时库。
方法 2:隐藏所有 STL 类成员以防止直接访问。
但是,当谈到方法 2 时,我知道客户端无法直接访问 STL 类成员以使该方法起作用,但这是否意味着:
//Note all the code in this example was written directly in my web broswer with no checking.
#ifdef SAMPLEDLL_EXPORTS
#define SAMPLE_API __declspec(dllexport)
#else
#define SAMPLE_API __declspec(dllimport)
#endif
class SAMPLE_API SampleClass
{
std::map<int, std::string> myMap;
public:
SampleClass();
~SampleClass();
void addSomething(int in_Key, char* in_Val)
{
std::string s(in_Val);
myMap.insert( std::pair<int, std::string>(in_Key, s) );
};
bool getHasKey(int in_Key)
{
return myMap.find(in_Key) != myMap.end();
};
};
会工作?