2009-07-01 3 views
2

우리는 C++ 코드에서 호출하기를 원하는 원시 Win32 C++ 코드와 C# 어셈블리를 가지고 있습니다. 나는 우리의 optios를 다음과 같이 요약한다 :C++ 호출 C# 옵션

  1. COM을 사용한다. C# 코드는 추가 속성 (GUID, COMVisible)으로 장식되어야합니다. C# 어셈블리는 regasm에 등록해야하며 COM을 통해 네이티브 C++ 코드에서 사용할 수 있습니다.

  2. C++/CLI (이전 관리 C++) 래퍼 클래스를 사용하십시오. C++ 클래스는 네이티브 C++ 프로젝트에 추가 될 수 있습니다. 이 클래스는/clr로 컴파일됩니다. 네이티브 C++ 코드는 .Net 코드를 호출하는 C++/CLI 클래스를 호출합니다. COM 관련 없음. CLR은 C++/CLI 확장에 의해 처리되는 마샬링과 함께 마술에 의해 시작됩니다.

  3. 네이티브 C++ 코드에서 CLR 인스턴스를 호스트합니다.

래퍼 클래스에 대한 필요성을 잃어 버리는 것 외에도 옵션 2보다 이점이 많으므로 옵션 3을 할인하려고합니다. 그래서 문제는 옵션 1과 옵션 2의 장단점은 무엇입니까?

미리 감사드립니다.

답변

3

옵션 2는 최상의 성능을 발휘하며 가장 완벽하고 유지 보수가 간편한 IMO입니다.

내가 찾은 옵션 1에는 별다른 이점이 없습니다. C++/CLI를 사용하면 훨씬 더 잘 작동하고, 더 빨리 작동하며, 훨씬 간단 해집니다.

또한 래퍼 클래스가 없어도 C# 어셈블리를 직접 사용할 수 있습니다. 이렇게하려면/CLR과 함께 사용하려는 파일을 컴파일해야하지만 꽤 잘 작동합니다.

1

옵션 1의 경우 기본 프로는 프로젝트에 따라 털이 많은 래퍼 클래스를 작성할 필요가 없습니다.

옵션 2의 경우 관리되지 않는 사용을 용이하게하기 위해 관리되는 라이브러리를 수정할 필요가 없으며 때로는 옵션이 아닙니다.

제게는 코드를 변경하려는 부분이 나옵니다.

1

옵션 2를 사용하면 전체 응용 프로그램을 C++/CLI로 변환하여 관리되는/관리되지 않는 전환을 피할 수 있습니다. 전환은 참조 된 어셈블리를 사용하는 방법 즉 성능 저하를 가져 오는 방법에 따라 문제가 될 수 있습니다.

지금까지 C++/CLI에 대한 긍정적 인 경험이 있었으며 그 경로를 추천 할 수 있습니다.