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


답변:


90

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();

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


2
블로그 게시물에 대한 링크가 끊어졌습니다. (
Vidar

10

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


콜백 및 p / invoke에 문제가 있습니다. C ++ / CLI로 전환하면 이러한 문제가 해결되었습니다.
MedicineMan

9

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

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



2

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.