将Stl容器发送到dll

时间:2016-05-08 10:46:17

标签: c++ dll stl marshalling

在回答问题之前,请理解我的项目环境。

我的DLL中有一个类,它包含嵌套的stl容器和结构作为成员。

通过使用DLL类头文件,我的应用程序动态地将内存分配给dll的类对象并将其发送到dll,通过读取文件来填充数据。

现在,在工具方面,我能够获取类中结构的数据,但无法获取stl容器的数据。

- >这背后的原因是什么?将stl容器传递给dll是否正常?

注意:

  1. DLL和应用程序都使用相同的代码工作室编译。两者都是32位。
  2. 我试图通过引用和对象发送容器。两者都不起作用。

  3. 在将所需代码转移到dll之前创建演示应用程序时,相同的代码正常工作。

  4. 还有一点......,当我调试库时,我可以看到数据已经被填充到容器中,但是当我回到应用程序时,没有数据存在。调试中一个有趣的事实是,我们说我在stl容器中存储了3个对象,在调试时,当控件返回应用程序时,我能够在看到变量时看到计数。

    类似于“comp | less”,剩下的标签是“错误”。

  5. 请考虑以下代码:

    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容器?

0 个答案:

没有答案