C #에서 C ++ 코드를 호출 할 수 있습니까? #과 같은 .NET 언어 내에서 코드 라이브러리

C #과 같은 .NET 언어 내에서 코드 라이브러리 파일 (.dll)로 컴파일 된 C ++ 코드를 호출 할 수 있습니까?

특히 RakNet 네트워킹 라이브러리와 같은 C ++ 코드입니다.



답변

C ++를 호출하는 쉬운 방법 중 하나는 C ++ / CLI에서 래퍼 어셈블리를 만드는 것입니다. C ++ / CLI에서는 네이티브 코드를 작성하는 것처럼 관리되지 않는 코드를 호출 할 수 있지만 C #으로 작성된 것처럼 C #에서 C ++ / CLI 코드를 호출 할 수 있습니다. 이 언어는 기본적으로 “킬러 앱”으로 기존 라이브러리에 상호 운용되도록 설계되었습니다.

예를 들어-/ clr 스위치로 컴파일하십시오.

#include "NativeType.h"

public ref class ManagedType
{
     NativeType*   NativePtr;

public:
     ManagedType() : NativePtr(new NativeType()) {}
     ~ManagedType() { delete NativePtr; }

     void ManagedMethod()
      { NativePtr->NativeMethod(); }
};

그런 다음 C #에서 ManagedType 어셈블리에 대한 참조를 추가하고 다음과 같이 사용합니다.

ManagedType mt = new ManagedType();
mt.ManagedMethod();

자세한 설명은 이 블로그 게시물 을 확인하십시오 .


답변

P / Invoke는 좋은 기술이며 대상 DLL 파일을로드하는 문제를 제외하고는 상당히 잘 작동합니다. 작업을 수행하는 가장 좋은 방법은 네이티브 함수의 정적 라이브러리를 만들고이를 종속 된 Managed C ++ (또는 C ++ / CLI) 프로젝트에 연결하는 것입니다.


답변

말씀하신 라이브러리에 익숙하지 않지만 일반적으로 몇 가지 방법이 있습니다.

  • 내 보낸 라이브러리 함수에 대한 P / Invoke
  • COM 형식 라이브러리에 대한 참조 추가 (COM 개체를 다루는 경우).


답변

예, P / Invoke 라고 합니다.

다음은 Win32 API와 함께 사용할 수있는 훌륭한 리소스 사이트입니다.

http://www.pinvoke.net/


답변

당연히. 이 기사 는이를 시작하기 위해 할 수있는 좋은 예입니다.

P / Invoke를 사용하여 Windows Mobile 장치의 C #에서이 작업을 수행합니다 .


답변

이를 수행하는 데 사용되는 기술을 P / Invoke 라고합니다 . 주제에 대한 기사를 검색 할 수 있습니다. C ++이 아닌 C #에서 C를 호출하기위한 것입니다. 따라서 DLL이 내보내는 C 래퍼에 C ++ 코드를 래핑해야합니다.


답변

Apache Thrift를 고려해 보셨습니까?

http://thrift.apache.org/

매우 깔끔한 솔루션 인 것 같습니다.