문제

C# 프로젝트를 만들고 기존 네이티브 (C ++) 코드를 구현하고 싶습니다. 그것에 대한 좋은 튜토리얼에 대해 아는 사람이 있습니까?

감사!

도움이 되었습니까?

해결책

P/Invoke를 사용할 수 있으며 관리되지 않는 메소드를 호출 할 수 있습니다. 몇 가지 예를 게시하겠습니다.이것 MSDN 공식 문서에 대한 참조입니다.이것 메소드 서명 및 예제와 함께 대부분의 일반적인 Windows가 관리하지 않는 라이브러리가있는 커뮤니티 맨티 인 웹 사이트입니다.

다른 팁

C ++ 코드가 관리되면 (귀하가 말하는대로) C ++로 남겨 두는 것이 좋습니다. ~하지 않는 한 미래의 C# (등) 어셈블리는 '그대로'그대로 참조 할 수 있어야합니다.

나는 기존 코드를 구현하십시오 C ++ 코드를 최소화하여 C#에서 호출하고 싶다는 것을 의미합니다.

저는이 책의 팬이자 최근 구매자입니다 C ++/CLI 활동 온라인으로 유용한 샘플 챕터가 몇 개 있습니다.

이것 CodeProject의 소개 좋은 출발점입니다.

C ++/CLI in Action의 저자는 CodeProject에 많은 기사를 가지고 있으며 C ++/CLI 섹션으로 스크롤합니다. 그의 지수.

그만큼 P/Invoke에 대한 Wikipedia 기사 해당 접근법을 사용하고 싶지 않은 여러 가지 이유가 있습니다.

  • 컴파일러에 의한 입력 지원 손실
  • 가능한 데이터 유형 또는 정렬 문제로 인해 유형을 손으로 매핑해야합니다.
  • 쓰레기 수집 된 물체를 고정해야합니다

MSDN의 가장 좋은 출발점은 다음과 같습니다 요약 기사.

C ++ 코드를 위해 관리되는 포장지를 시도해 보지 않겠습니까?

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmg_accessingcodeframframeworkobjects.asp

아마도 가장 쉬운 방법은 C ++/CLI 프로젝트를 만드는 것입니다.이 프로젝트는 관리 및 관리되지 않은 C ++를 혼합 할 수 있습니다. 그런 다음 C# 코드가 직접 호출 할 수있는 관리되는 .NET 래퍼로 기존의 관리되지 않은 C ++ 클래스를 랩핑 할 수 있습니다. MSDN Magazine에는 좋은 입문이 있습니다 기사 C ++/CLI에서.

Interop은 실제로 C 스타일 기능을 호출하는 데 유용합니다. 순수한 C ++ 클래스와 상호 작용하는 데 실제로 사용할 수는 없습니다.

나는 이것을하면서 이것을 배웠으므로 좋은 튜토리얼이 없지만, 잘 알고 있어야 할 몇 가지가 있습니다. 이것은 C#의 경우가 아닙니다. 관리되는 C ++에서는 다음과 같은 일을 할 수 있습니다.

dotNetForm->Text = S"My Project"; // regular managed code
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged

C#에서는 setwindowtext로 p/호출 해야하는 반면, 당신은 정말로 당신이 그렇게 할 것입니다. 그것은 단순한 예일뿐 아니라 관리되는 C ++ 컴파일러가 투명하게 당신을 위해 많은 인터 로프를 수행하는 이상한 조합이라는 것을 알고 있어야합니다. 그리고 동시에 당신을 위해 아무것도하지 않습니다 (즉, 그것은 암시적인 Marashalling을 할 수 없습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top