在回答问题之前,请理解我的项目环境。
我的DLL中有一个类,它包含嵌套的stl容器和结构作为成员。
通过使用DLL类头文件,我的应用程序动态地将内存分配给dll的类对象并将其发送到dll,通过读取文件来填充数据。
现在,在工具方面,我能够获取类中结构的数据,但无法获取stl容器的数据。
- >这背后的原因是什么?将stl容器传递给dll是否正常?
我试图通过引用和对象发送容器。两者都不起作用。
在将所需代码转移到dll之前创建演示应用程序时,相同的代码正常工作。
还有一点......,当我调试库时,我可以看到数据已经被填充到容器中,但是当我回到应用程序时,没有数据存在。调试中一个有趣的事实是,我们说我在stl容器中存储了3个对象,在调试时,当控件返回应用程序时,我能够在看到变量时看到计数。
类似于“comp | less”,剩下的标签是“错误”。
请考虑以下代码:
bool CMyClass::ReadHeaderData(
) {
bool status = false;
CMyLib *lib_obj = ((CMyClassApp*)::AfxGetApp())->GetLibObj ();
for (int cnt = 0; cnt < 5; ++cnt) {
CString file_path = GetFilePathOfHeader(cnt);
if (PathFileExists(file_path)) {
CMyEntity* entity_obj = new CMyEntity;
if (lib_obj ->FillHeaderData(file_path, entity_obj)) {
//some processing
status = true;
}
}
}
return status;
}
示例实体类结构是:
CMyEntity {
struct1 {...};
struct2 {...};
std::map<key1, std::map<key2,value> >;
};
**当我尝试将stl容器的指针引用直接发送到DLL时,它工作正常。唯一的问题是当我试图将它发送到我的类对象中时。
如果DLL和应用程序的堆栈帧不同,为什么数据会进入结构?为什么它不仅仅用于stl容器?