2013-01-06 6 views
2

C++에서 네이티브/CLI DLL을 작성하고 있습니다. 결국 C# 코드 (나는 더 익숙하다)에서 DLL을 호출 할 것이지만 CLI 래퍼로 내 기본 C++ 클래스를 래핑하려고한다.네이티브/CLI C++ : 벡터 <class1_native>를 List로 변환하는 방법 <class1_cli>

제 질문은, 제가 std :: vector를 List 클래스로 변환하는 가장 좋은 방법은 무엇입니까?

클래스는 다음과 같이, 가장 복잡한 모양 대부분 간단하다 :

class SecurityPrincipal 
{ 
public: 
    wstring distinguishedName; 
    SECURITYPRINCIPAL_NODE_TYPE NodeType; 
    vector<LDAPAttribute> Attributes; 
    vector<SecurityPrincipal> Nodes; 
} 

는 솔직히 말해서, 나는 심지어 List<String>vector<wstring>를 얻을 수 없었다.

도움이 될 것입니다.

답변

4

저는 그 수준의 변환을 허용하는 C++에 포함 된 표준 알고리즘/기능을 알지 못합니다. 하지만 for 루프가 작동하지 않는 이유가 있습니까? 다음은 두뇌 컴파일입니다.

typedef System::Collections::Generic::List<class1_cli> MyList; 
typedef std::vector<class1_native> MyVector; 

MyList^ NativeToManaged(MyVector& v) { 
    MyList^ result = gcnew MyList(); 
    if (result != nullptr) { 
     for (MyVector::iterator i = v.begin(); i != v.end(); ++i) { 
      class1_native& nativeValue = *i; 
      result.Add(gcnew class1_cli(nativeValue)); 
     } 
    } 
    return result; 
} 
+0

컴파일/실행을 위해 몇 시간 동안 노력했지만 시도 할 수 없었습니다. 이 줄에 문제가 있습니다 : gcnew class1_cli (nativeValue). 네이티브 데이터로 CLI 클래스를 초기화하기 위해 생성자를 넣어야한다고 말하고 있습니까? 아니면 여기에 뭔가가 있습니까? 나는 (SecurityPrincipal_CLI ^) nativeValue와 함께 변환하려고했지만, 그 중 하나도 작동하지 않을 것이다. – ChrisG

+0

글쎄, 네 CLI 클래스 어떻게 든 네이티브 형식을 래핑 가정하지? 정확히 구현 방법은 무엇입니까. –

+0

괜찮 았습니다. 더 쉬운 방법이 있었으면 좋겠다고 생각했지만, 그렇지 않은 것 같아요. 아. 자세한 답변은 +1. – ChrisG