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를 사용하여 Windows Mobile 장치의 C #에서이 작업을 수행합니다 .
이를 수행하는 데 사용되는 기술을 P / Invoke 라고합니다 . 주제에 대한 기사를 검색 할 수 있습니다. C ++이 아닌 C #에서 C를 호출하기위한 것입니다. 따라서 DLL이 내보내는 C 래퍼에 C ++ 코드를 래핑해야합니다.