2009-01-15 3 views

답변

4

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

3

당신의 C++ 코드가 (당신이 말한대로) 관리되는 경우, 나는 당신이에 아주 좋은 이유가하지 않는 한 C++ 로 두는 것이 좋을 것 - 미래의 C#을 (등) 어셈블리는 '있는 그대로'참조 할 수 있어야합니다.

+0

좋은 점 - 나는 이것을보고 "기존 * un * managed (C++) 코드"로 읽었습니다. 문맥을 감안할 때 오타가 될 수 있습니다. –

+0

나는 경험을 통해 항상 처음부터 확실하게 확인할 가치가 있음을 알았습니다. 물론 오타 일 경우 많은 답변이 주어졌습니다. –

+0

내 실수 ... 네이티브입니다. C++ –

0

아마도 가장 쉬운 방법은 관리되는 C++과 관리되지 않는 C++를 혼합 할 수있는 C++/CLI 프로젝트를 만드는 것입니다. 그런 다음 관리되지 않는 C++ 클래스를 C# 코드에서 직접 호출 할 수있는 관리되는 .Net 래퍼로 래핑 할 수 있습니다. MSDN 매거진은 C++/CLI에서 article을 소개합니다.

Interop은 C 스타일의 함수를 호출 할 때만 유용합니다. 정말로 순수 C++ 클래스와 상호 작용할 수는 없습니다.

0

이 튜토리얼을 통해이 사실을 알게되었으므로 좋은 튜토리얼은 없지만 관리해야 할 C + + 및 C++/CLI와 관리되지 않는 코드를 매우 모호한 이음새로 통합하는 두 가지 사항이 있습니다. . C#에서는 그렇지 않습니다./SetWindowText로 호출하면 P해야

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

C#에서 반면 -하지 않는 것이 당신이 정말로 것 : 관리 C++에서는 이런 일을하는 것은 매우 가능성이 그냥 간단한 예제입니다,하지만 당신은 필요 관리되는 C++ 컴파일러는 투명하게 많은 상호 운용성을 수행하고 동시에 (즉, 암시 적 marashalling을 수행하지 않을) 당신을 위해 아무 것도하지 않는 이상한 조합이라는 것을 알고 있어야합니다.

3

이 기존 코드을 구현한다고 가정하면 C++ 코드를 최소한으로 변경하고 C#에서 호출하려고한다는 것을 의미합니다.

나는 팬이라는 책을 사서 C++/CLI in Action 최근 구매자에게 유용한 샘플 장이 몇 권 있습니다.

intro on CodeProject은 좋은 출발점입니다.

C++/CLI in Action의 저자는 CodeProject에 대한 기사가 많으며 C++/CLI 섹션까지 his index으로 스크롤하십시오.입력 지원

  • 손실을 컴파일러에 의해
  • 가능한 데이터 유형 또는 정렬 문제를 당신과 같이

    Wikipedia article on P/Invoke

    는 동의있는 당신이 방법을 사용하고 싶지 않을 수도 이유의 번호를 가지고 손으로 가비지 수집 된 개체

MSDN에 가장 좋은 출발점이 summary article입니다 핀

  • 필요 형식을 매핑해야합니다.