내 솔루션에서 나는 C++ (vs2010) 프로젝트의 일부 메소드를 실행하는 C++/CLI (vs2012) 프로젝트를 가지고 있습니다. 여기 는 네이티브 코드의 서명입니다 :std :: vector <std :: vector <int>>을 C++에서 C++/CLI로 반환하는 방법은 무엇입니까?
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이며 벡터의 각 항목에는 int 벡터가 포함됩니다. 네이티브 측에서 디버거로 볼 수 있습니다. 관리되는 쪽 (C++/cli 프로젝트)으로 돌아 가면 문제가 생깁니다. clusterIndex == 0 및 clusterIndex == 5 인 경우 올바르게 작동하지만 clusterIndex의 다른 값에서 AccessViolationException을 발생시킵니다.
auto cluster0 = clusters[0]; // works
auto cluster1 = clusters[1]; // AccessViolationException
auto cluster5 = clusters[5]; // works
어떻게 될 수 있습니까?
특히 다른 컴파일러/버전간에 DLL 경계를 넘어 STL 형식을 전달하고 반환하는 것은 권장되지 않습니다. – Medinoc
함수가 'Downsample'이며 동일한 DLL에서이 함수를 호출합니까? – pogorskiy
@pogorskiy 아니요, 그들은 다른 DLL입니다. –