문제

관리되지 않은 .dll로 관리되지 않은 코드를 래핑하려고 시도합니다. Generic::List 데이터 포인트의 a std::vector. 다음은 내가하려는 일의 스 니펫입니다.

namespace ManagedDLL
{
    public ref class CppClass
    {
        void ListToStdVec( const List<double>& input_list, std::vector<double>& output_vector )
        {
            // Copy the contents of the input list into the vector
            // ...
        }

        void ProcessData( List<double> sampleData )
        {
            std::vector<double> myVec;

            ListToStdVec( sampleData, myVec );

            // Now call the unmanaged code with the new vector
            // ...
        }
    }
}

이것을 컴파일하는 것은 나에게 제공합니다 :

오류 C3699 : '&': 'const system :: collections :: generic :: list'에서이 간접을 사용할 수 없습니다.

나는 아마도 근본적인 것을 놓쳤을 것입니다 (나는 .NET의 일을하는 방식에 비교적 새로운 것입니다). 그러나 그것은 나에게 합리적으로 유효한 코드처럼 보입니다 ..?

편집하다 Andy와 Dario의 제안을 모두 시도했지만 작동하지만 입력 목록의 구성원에게 어떻게 액세스합니까? 나는 모든 종류의 유도 조합을 시도했지만 아무것도 컴파일하지 않는 것 같습니다.

void ListToStdVec( const List<double>% input_list, std::vector<double>& output_vector )
{
    int num_of_elements = input_list->Count;
}

void ListToStdVec( const List<double>^ input_list, std::vector<double>& output_vector )
{
    int num_of_elements = input_list.Count;
}

... 둘 다 나에게 줘 :

오류 c2662 : 'system :: collections :: generic :: count :: count :: get :'const system :: collections :: generic :: list 'to'system :: collections :: collections :: collections :: countress : get ':'system :: count :: count ':'이 '포인터를 변환 할 수 없습니다. 제네릭 :: 목록 %'

... 그래서 참조 / 포인터에 어떻게 액세스합니까?

도움이 되었습니까?

해결책

처럼 List<T> 관리되는 .NET 클래스이며 C ++-참조가 아닌 ^로 표시된 관리 GC 핸들로 통과합니다.

전:

void ListToVec(List<double>^ input_list, std::vector<double>& out)

추가가 필요하지 않습니다 const 여기. 표기법 List<T>^% 참조로 호출 대신 추적 참조 (C ++-포인터와 비슷한)를 만듭니다. 회원에게 액세스하십시오 list->... 그리고 list[...].

다른 팁

에 따르면 허브 셔터, % 참조 문자 별 관리 객체 패스입니다. 코드를 다음으로 변환하면 작동해야합니다.

void ListToStdVec( const List<double>% input_list, std::vector<double>& output_vector
{
    // Copy the contents of the input list into the vector
    // ...
}

편집하다: 제 생각에는 const 왜 그런지 잘 모르겠지만 문제를 일으키고 있습니다. 당신이 변경하면 List 그렇지 않은 주장 const, 그러면 첫 번째 함수는 사용하면 컴파일됩니다. -> 연산자, 두 번째 함수는 사용하면 컴파일됩니다. . 연산자 (왜 그 차이가 존재하는지 잘 모르겠습니다. 그다지 의미가 없습니다).

즉, 당신이하고 싶은 모든 것이 요소를 List ~로 vector, 당신은 정말로 사용하고 싶습니다 ^. 그것을 관리되는 객체에 대한 참조로 생각하십시오. 내 생각에는 % "참조"(예 : Reassign) input_list 내면의 다른 것에 ListToStdVec(), 발신자에게 해당 과제의 결과를 보게하십시오. 그러나 당신이 사용한다는 것을 감안할 때 . 사용시 멤버에 액세스 할 수있는 연산자 %, 그것은 내가 그 목적을 전혀 이해하지 못할 수도 있음을 알려줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top