我的C#文件 Rec.cs 中有一个Dictionary变量,定义为:

Dictionary<string, PrepDumpLoadItem> pPrepDumpLoadList

pPrepDumpLoadList充满了键和值,如下所示
foreach (XElement element in root.Elements())
                {
                    PrepDumpLoadItem item = new PrepDumpLoadItem();
                    item.Name = element.Name.ToString();

                    string isDumpMode = GetValueString(element, "Dump", "enabled");
                    if (isDumpMode == "1")
                    {
                        item.PrepDumpLoadMode += PrepDumpLoadModeType.DUMP;
                        item.HeaderFile = GetValueString(element, "Dump", "header");
                        item.DataFile = GetValueString(element, "Dump", "data");
                        //pPrepDumpLoadList.Add(item.Name, item);
                    }

                    string isLoadMode = GetValueString(element, "Load", "enabled");
                    if (isLoadMode == "1")
                    {
                        item.PrepDumpLoadMode += PrepDumpLoadModeType.LOAD;
                        item.HeaderFile = GetValueString(element, "Load", "header");
                        item.DataFile = GetValueString(element, "Load", "data");
                        //pPrepDumpLoadList.Add(item.Name, item);
                    }

                    pPrepDumpLoadList.Add(item.Name, item);
                }

在上面的代码之后,pPrepDumpLoadList有12个条目,这意味着其数量== 12;

然后,将其传递到C++文件 WrapperRec.cpp 中,应该提取其中的每个条目,然后传递/复制到C++ std::map变量PrepDumpLoadList中。定义为
std::map<std::string, PrepDumpLoadItem> PrepDumpLoadList;

SRecParameters.h中的SRecParameters结构内

这是PrepDumpLoadList在 Debug模式下的外观(Visual Studio 2015):

c# - C#字典到C&#43;&#43; std::map-LMLPHP
看起来不错。 recon作为参数传递,例如
void WrappedRecon::CreateImpl( ScanParameters scan,
                           ReconParameters recon,
                           ScannerParameters scanner,
                           MessageHandler^ msgHandler
                         )

并且我相信它是一个与SRecParameters相同/相似的结构变量。

但是,我很难从PrepDumpLoadList,C#的Dictionary变量中提取条目。

我努力了
map<std::string, PrepDumpLoadItem>::iterator it = recon.PrepDumpLoadList.begin();

但红色摆动出现在recon下方,并且编译错误提示错误C2228:'.begin'的左侧必须具有class / struct / union

我对这里发生的事情感到非常困惑。我只是在尝试类似
for (int i = 0; i<recon.PrepDumpLoadList->Count; ++i) {

    CopyString(item.Name, recon.PrepDumpLoadList[i].Name, sizeof(item.Name));

    item.PrepDumpLoadMode = static_cast<DumpLoadModeType>(recon.PrepDumpLoadList[i].PrepDumpLoadMode);

    CopyString(item.HeaderFile, recon.PrepDumpLoadList[i].HeaderFile, sizeof(item.HeaderFile));
    CopyString(item.DataFile, recon.PrepDumpLoadList[i].DataFile, sizeof(item.DataFile));

    reconParams.PrepDumpLoadList.push_back(item);
}

从Dictionary变量中提取信息,并将其推回到std::map变量。任何人都可以提供一些指示,指出问题所在以及如何解决?非常感谢。

最佳答案

我通过在C#中创建List进行了走动,然后处理(编码)此List中的每个项目。并将它们放在C++ std::map中。

10-06 15:23