none
c# 함수를 c++ 함수포인터로 전달하기 RRS feed

  • 질문

  •  c#함수를 c++내부 라이브러리에서 호출을 하고 싶습니다.

    일단 c++에 c#함수의 함수 포인터를 넘겨서

    c++ 호출 중에 콜백함수 호출하듯이 호출되서 프로그램상의 변화를 주고 싶은데

    작업을 클래스 라이브러리(c#) 프로젝트를 생성하여 작업을 하고자 합니다.

    어떻게 하는게 가장 효과적일까요? 

    2012년 4월 17일 화요일 오전 7:52

모든 응답

  • C# 라이브러리 내의 클래스 메서드를 Native C++에서 호출하고 싶다는 의미로 생각됩니다.
    함수 포인터 형태로 전달하는 것은 불가능합니다.

    호출이 가능하게 하는 방법은 크게 2가지가 있는데요,
    C# 어셈블리를 COM으로 등록(RegAsm 사용)하고, Native C++에서 COM을 사용하는 것과 동일한 방식(예: CoCreateInstance)으로 호출하거나,
    C++ 라이브러리를 Native C++이 아닌 Managed C++로 작성하는 방식이 있습니다.

    전자는 호출하려는 대상이 .NET 어셈블리인지 아닌지를 모르는 상태에서 COM 인터페이스만을 통해 호출하는 것이고,
    후자는 호출하려는 대상이 .NET 어셈블리이므로, 그에 맞게 호출자(C++)를 변경하는 방식입니다.
    Managed C++을 사용하는 것이 가능하다면, COM 등록과정을 생략할 수 있는 후자가 더 깔끔합니다.

    2012년 5월 3일 목요일 오전 12:49