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와 함께 사용할 수있는 훌륭한 리소스 사이트입니다.
당연히. 이 문서 는이를 시작하기 위해 할 수있는 좋은 예입니다.
P / Invoke를 사용하여 Windows Mobile 장치의 C #에서이 작업을 수행합니다 .
이를 수행하는 데 사용되는 기술을 P / Invoke 라고합니다 . 주제에 대한 기사를 검색 할 수 있습니다. C ++가 아닌 C #에서 C를 호출하기위한 것입니다. 따라서 DLL이 내보내는 C 래퍼에 C ++ 코드를 래핑해야합니다.
Apache Thrift를 고려해 보셨습니까?
매우 깔끔한 솔루션 인 것 같습니다.
참고 URL : https://stackoverflow.com/questions/935664/possible-to-call-c-code-from-c
'Programing' 카테고리의 다른 글
Map / Reduce 란 무엇입니까? (0) | 2020.09.25 |
---|---|
PHP의`post_max_size`를 초과하는 파일을 정상적으로 처리하는 방법은 무엇입니까? (0) | 2020.09.25 |
캡처를 함수 포인터로 사용하는 C ++ 람다 (0) | 2020.09.25 |
플롯하는 데 권장되는 방법은 matplotlib 또는 pylab입니까? (0) | 2020.09.25 |
스칼라 밑줄-오류 : 확장 함수에 대한 매개 변수 유형이 없습니다. (0) | 2020.09.25 |