Programing

C #에서 C ++ 코드를 호출 할 수 있습니까?

lottogame 2020. 9. 25. 08:11
반응형

C #에서 C ++ 코드를 호출 할 수 있습니까?


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
  • COM 형식 라이브러리에 대한 참조 추가 (COM 개체를 다루는 경우).

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


예, 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/

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

참고 URL : https://stackoverflow.com/questions/935664/possible-to-call-c-code-from-c

반응형