none
c#과 c++ 연동에 대해서 질문이 있습니다. RRS feed

  • 질문

  • 제가 하고있는 일에 목표는 특정기계와 COM포트로 연결되는 MFC로 짜여져있는 프로그램이 있는데

    이것을 C#과 C++로 만들어서 MFC로 짜여져있는 프로그램과 똑같은 기능을 구현하는 것입니다.

    C#과 C++ 연동은 C++프로젝트를 C#프로젝트에 추가해서 레퍼런스 추가하고

    C++ 내에 헤더파일과 소스파일의 namespace와 ref class를 만들고

    C#에서 using으로 불러와서 쓰는 방법을 사용하려 하는데요

    여기서 문제가 되는게 기본적으로 제공되는 윈도우 헤더파일을 사용하는 메소드들이 꽤 많은데

    이를 class가 아닌 ref class로 감싸니 에러가 발생합니다.

    그래서 class로 먼저 만들고 ref class에서 상속받으려 했으나 이마저도 안되고 있습니다.

    여기서 질문은 ref class로 하는 법 이외에도 c++과 c# 연동할 방법이 있는지(dll로 만들어서 하면 static이다 보니 계속 값을 유지해야 하는데 한 번 하고 끊겨버립니다)

    또한 ref class를 사용하더라도 상속을 받을 수 있는 방법이 있는지 궁금합니다.


    • 편집됨 soirony 2014년 7월 24일 목요일 오전 12:16
    2014년 7월 24일 목요일 오전 12:14

답변

  • 접근 방법 자체를 달리 해야 합니다. C#과 C++/CLI가 물론 잘 연동이 되는 것은 맞지만, 그렇다고 C#과 C++이 연동되는 것은 아닙니다. 즉, C#에서 C++/CLI를 연동하는 접점을 최소화하고 C++/CLI의 코드는 그 접점에 대해서만 ref class로 만들어 기능을 제공해야 합니다.

    예를 들어, 기존 C++의 코드를 C# + C++/CLI로 그대로 1:1 매핑하는 식으로 옮기지 마시고, C++의 코드를 하나의 메서드로 잘 감싸고, C#에서는 그 메서드를 가능한 기본 타입 값으로 호출하도록 만드는 것이 좋습니다.

    (참고로, 단순 DLL 보다는 다소 명시적인 ATL COM 개체를 만들어 C#과 연동하는 것도 좋은 방법입니다.)

    2014년 7월 24일 목요일 오후 4:52