gpt4 book ai didi

c++ - 如何将 std::vector> 从 C++ 返回到 C++/CLI?

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:27 24 4
gpt4 key购买 nike

在我的解决方案中,我有 C++/CLI (vs2012) 项目,它在 C++ (vs2010) 项目中执行某些方法。这是 native 代码的签名:

    void Pcl::Downsample(std::vector<CloudPointNative>& points, std::vector<std::vector<int>>& clusters)

下面是我在 C++/CLI 端执行它的方式:

    std::vector<std::vector<int>> clusters;
pcl->Downsample(points, clusters);

然后我尝试遍历集群:

    for (int clusterIndex = 0; clusterIndex < clusters.size(); clusterIndex++)
{
auto cluster = clusters[clusterIndex];

簇的大小为 7, vector 中的每一项都包含 int vector 。我可以在 native 端的调试器中看到这一点。一旦我回到托管端(C++/cli 项目),我就会遇到问题。如果 clusterIndex == 0 和 clusterIndex == 5,它可以正常工作。但是在 clusterIndex 的任何其他值上抛出 AccessViolationException。

auto cluster0 = clusters[0]; // works
auto cluster1 = clusters[1]; // AccessViolationException
auto cluster5 = clusters[5]; // works

这怎么可能?

最佳答案

已解决。我已将签名更改为:

std::vector<std::vector<int>*>* Pcl::Downsample(std::vector<CloudPointNative>& points)

还添加了Free方法来删除 vector

void Pcl::Free(std::vector<std::vector<int>*>* clusters)
{
for(int i = 0; i < clusters->size(); i++)
{
delete (*clusters)[i];
}
delete clusters;
}

因为在外部 DLL 中创建的对象也应该在外部 DLL 中删除。

关于c++ - 如何将 std::vector<std::vector<int>> 从 C++ 返回到 C++/CLI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17187120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com