2010-04-14 4 views
35

저는 C++ 프로젝트를 진행했습니다. 나는 C++로 완전한 제로라는 것을 인정한다. 하지만 여전히 그것을 사용하는 관리되지 않는 C++ 라이브러리로 작업 할 수 있도록 C++ .Net 래퍼를 작성해야합니다. 그래서 내가 가지고있는 것 : 1) 관리되지 않는 프로젝트의 헤더 파일. 2) 관리되지 않는 프로젝트의 라이브러리 (.DLL 년대와 lib 디렉토리 년대) 3) 내 C# 응용 프로그램간단한 C++. net 래퍼 만들기. 단계별 설명

의 래퍼로서 사용하려면 빈 C++. NET 프로젝트는 어떻게 시작? 관리되지 않는 라이브러리에 대한 참조를 설정하는 방법조차 모르겠습니다.

S.O.S.

+13

필자는 정확하게 똑같은 상황에서 절망적이며 우둔하다고 들린다. –

답변

35

http://www.codeproject.com/KB/mcpp/quickcppcli.aspx#A8

이것은 일반적인 방향이다. C++/CLI 클래스 라이브러리 프로젝트를 만들고 .NET 클래스를 추가하고 (이 샘플에서는 StudentWrapper), 관리 클래스 멤버로 관리되지 않는 클래스 인스턴스를 만들고 모든 관리되지 않는 클래스 함수를 래핑해야합니다. 비 관리 라이브러리는 참조가 아닌 링커 종속성 목록을 사용하여 C++/CLI 프로젝트에 추가됩니다. 프로젝트 - 속성 - 링커에서 추가 종속성을 열고 여기에 .lib 이름을 추가하십시오.

참고 : 우리가 C++/CLI 래퍼에 대해 이야기하고 있으므로 PInvoke가 없습니다! PInvoke는 클래스가 아닌 내 보낸 함수 (API)를 호출하는 데 사용됩니다.

+5

C++/CLI는 실제로 암시적인 P/Invoke이므로 P/Invoke입니다. http://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx, P/Invoke를 사용하여 C++ 클래스를 호출 할 수도 있습니다. 추가 작업이 필요합니다. – xInterop

+0

[codeproject (link)] (http://www.codeproject.com/Articles/651516/Exposing-native-to-managed-Cplusplus-CLI-vs-P-Invo)의 또 다른 훌륭한 기사입니다. P/Invoke와 C++/CLI를 모두 설명합니다. 신용 에 Shmuel Zang. –

8

.NET의 p/invoke을 사용하여 관리되지 않는 DLL과 통신해야합니다.

기본적으로 관리되지 않는 DLL에서 호출 할 각 함수에 대한 함수 헤더를 만들고 .NET에 함수가있는 DLL을 알려준 다음 .NET 래퍼에서 다른 함수처럼 해당 함수를 호출하면됩니다.

관리되지 않는 DLL의 함수 정의와 올바른 데이터 형식을 알고있는 한 C++ 지식도 필요 없습니다.

+1

링크가 오늘부터 끊어지는 것 같습니다. – qbolec