2012-02-21 2 views
2

나는 C#에서 다음과 유사한 있습니다 : 내가 관리되지 않는으로이 개체 모델을 전달하려는호출 C#을 방법

public class ClassA 
    { 
     int Id { get; set; } 
     ClassB[] ClassBItems { get; set; }  
    } 

public class ClassB 
    { 
     int SomeOtherId {get;set;} 
    } 

을 C++. 나는. 'GetClassA() : ClassA'와 같이 관리되지 않는 C++ 코드를 호출하십시오.

지금까지 관리되는 C#에서 관리되지 않는 C++ (COM/CCW 사용)로 단일 개체 또는 개체 배열을 전달했지만 그 안에 ClassB와 함께 ClassA를 전달하지 않았습니다.

내 질문은 : 그 안에

  1. 내가 다시 전달할 수있는 방법를 ClassA 이는 ClassB가 배열?
  2. 지금까지 C#에서 구조체 만 전달할 수있었습니다. 위의 예제는 실제로 전달하려고하는 클래스입니다. 나는. 데이터에 대한 참조

명확히하기 위해 비 관리 코드가 관리 코드를 호출합니다.

답변

0

정말 그렇게 할 수는 없습니다. 네이티브 C++에서 C# 메서드를 호출 할 수 없으며 그 반대의 경우도 마찬가지입니다. 당신이 무언가를 전달한다면, 그것은 방법이없는 항상 단순한 C struct입니다.

  1. 를 사용하여 C++/CLI :

    는하지만 해결하는 몇 가지 방법이 있습니다.

  2. COM 개체를 C# 클래스에서 제외시킵니다.

중 하나를하고 싶지 않다면 콜백을 관리되지 않는 코드 또는 이와 비슷한 것으로 전달하여 시도 할 수 있습니다. 그러나 나는 그것이 상대적으로 어렵고 지저분 할 것이라고 생각한다.

+0

저는 C# 메소드를 실제로 호출 할 수 없다는 것을 알고 있습니다 만, 같은 개념 인 COM을 사용하여 .net 코드를 호출 할 수 있습니다. C# 클래스에서 COM 개체를 만들 수있어서 기쁩니다. 원래 게시물에서 언급 한 구조와 동일한 구조를 유지할 수 있습니까? 감사. – ahallan