2012-05-18 2 views
3

표준 C++로 작성된 라이브러리가 있습니다. 나 또한 관리되지 않는 라이브러리를 사용하는 C#으로 작성된 .Net Windows 양식 응용 프로그램이 있습니다.관리되는/관리되지 않는 C++ 혼합?

나는 pinvoke를 사용할 수 있지만 C++은 완전히 OO이며 마샬링 등으로 엉망이되고 싶지 않다는 것을 알고 있습니다.

새 관리되는 C++ dll 프로젝트를 만들고 헤더와 코드 파일을 복사하여 붙여 넣은 다음 컴파일하여 모든 클래스에 액세스 할 수있는 방법이 있습니까?

또는 관리되는 C++에서 ref 클래스를 만들고이를 관리되지 않는 클래스에 연결해야합니까? 나는 이것을 가능한 한 단순하게하고 싶다.

감사합니다.

+1

C++/CLI는 혼합하여 관리/비 관리 대상입니다. –

+0

가능한 복제본 [C++/CLI 혼합 모드 DLL 생성] (http://stackoverflow.com/questions/2691325/c-cli-mixed-mode-dll-creation) –

답변

3

C++/CLI에서도 특정 .NET 래퍼를 작성해야하지만 모양이 다릅니다. 그래서 답을 C++/CLI 프로젝트에 넣고 다시 컴파일하고 그대로 사용할 수 있습니까? 여전히 데이터를 마샬링해야합니다.이 경우 p/Invoke를 사용하는 것이 좋습니다. 핸들을 만들고 고정 된 메모리를 사용하여 구조를 관리되는 코드에서 사용할 수있게 만들 수 있습니다.

필자는 두 가지 방법으로 모든 작업을 수행했습니다. CUDA C에서 GPU 라이브러리를 작성하고 p #/Invoke를 사용하여 호출했으며 C++에서 비디오 처리 라이브러리를 작성하고 C++/CLI 래퍼를 작성했습니다. .NET 응용 프로그램에서 사용했습니다. 필자는 CLI 래퍼가 더 고통 스럽다고 생각하지만 라이브 비디오의 경우 대기 시간이 짧았습니다 (메모리 복사가 적음). GPU 프로젝트의 경우 처리량에 더 관심이있었습니다.

0

아마도 C++/CLI에서 래퍼 클래스를 작성하려고 할 것입니다. 포인터 대신에 핸들러, 콜렉션 대신에 열거자를 반환하는 한 매우 간단합니다.