2010-11-26 3 views
10

C++ (네이티브, C++ CLI가 아닌) 코드에서 C# 클래스 메서드를 호출하는 방법이 궁금합니다. 간단하고 우아한 방법이 필요합니다.C++에서 C#을 호출하는 방법

+3

생각보다 좋을 수도 있습니다. –

+0

[C++에서 C# 코드를 호출 할 수 있습니다] (http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c) – cdiggins

답변

9

C# 어셈블리를 COM으로 표시하고 COM 인터페이스를 사용합니다. 그것이 내가 아는 한 자기가 IPC로 만든 것 옆에서 작동하게하는 유일한 방법이다. 문제는 .Net 어셈블리가 실행되고 C++이 기본 C++ 환경에서 실행되는 .NET 환경에서 발생합니다.

통신의 유일한 방법은 IPC 메커니즘 (소켓, ...)이거나 프로세스를 "분리"해야하므로 COM을 사용하는 것입니다.

+2

에 따르면 사샤에게는 실제로 2 가지 더 많은 방법이 있습니다. – gideon

+1

그래, "디커플링"제안이 필요하지 않습니다. ".Net"환경은 기본적으로 mscoree.dll이며 네이티브 프로세스에서로드 할 수 있습니다. – MSalters

9

사샤 Goldshtein이 물건의 사람이다 : 여기

는 COM 기반 솔루션을위한 튜토리얼입니다

그것을 다시 여러 가지 방법이 있습니다 : 1. Reverse P/Invoke (.NET 대리자가 콜백으로 전달되어야하므로 시작은 .NET 코드에서 "동작"이 시작될 때만 유효합니다.); 2. COM interop (모든 .NET 클래스는 명시 적 인터페이스가 있거나없는 COM 개체 일 수도 있음). 3. C++/CLI 랩퍼 클래스.

또한 http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx

페이지를 참조하십시오 :
http://www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx

10

당신은 "(C 번호는, VB.NET, F 번호, ...) 네이티브 C++ 프로그램이 호출하여 어떤 CLR Hosting 어떤 CLR 어셈블리를 포함 할 수 있습니다 ". 이것은 네이티브 프로그램 (예 : SQL Server)이 .NET 코드 확장을 지원하는 방법입니다. 예 : SQL Server의 SQL CLR

당신은 .NET에서 .NET 2.0 CorBindToRuntimeEx()CLRCreateInstance()를 사용하여 기본 과정에 CLR을로드 4.

세부 MSDN에서 발견, 또는 제프 리히터의 책 CLR via C# 할 수 있습니다.

+0

+1 멋짐! 이것에 대해 몰랐어요! – gideon

-1

가장 간단한 방법은 C++/CLI를 사용하는 것입니다. 코드에서 사용할 수 없다면 래퍼 dll을 작성하고 dll을 호출하십시오.

+1

방향이 잘못되었습니다. – user496949

관련 문제