2009-11-17 2 views
1

나는이 개 프로젝트와 솔루션이 있습니다비주얼 스튜디오 2008 C에서 데이터 공유 ++/C# 다중 프로젝트 솔루션

  1. C++의 주요 프로젝트를
  2. 교류 # 프로젝트 (디스플레이 시뮬레이터)

오늘날이 두 앱은 루프백 TCP 클라이언트/서버 연결을 사용하여 데이터를 공유하지만 그다지 좋지 않습니다 (타이밍 문제 ..). 직접 그 반대의 경우도 마찬가지 C++ 프로젝트에서 C#을 데이터에 액세스 할 수있는 방법이 있다면

궁금 해서요? (2 C# 프로젝트에서 가능할 것 같습니다.) 공유 메모리로 이것을 구현하는 가장 좋은 방법은 무엇입니까?

감사합니다. 마이클

편집 : 답변 감사합니다. 2 개의 프로젝트는 독립 솔루션이었으며 두 실행 파일이었습니다. 실제로 2를 1 솔루션/실행 파일로 병합하려고합니다. 정보 : C++ 앱은 임베디드 앱의 PC 버전입니다. C# 앱은 lcd/HMI 시뮬레이터입니다.

답변

0

당신은 C#으로 네이티브 코드에 액세스 할 수 COM Interop 또는 Platform Invoke를 사용할 수 있습니다.

그게 당신이 요구하는 것이 아니라면, 자세히 설명해주십시오.

0

Named Pipes?

명명 된 파이프를 통한 프로세스 간 통신의 경우 C# 측의 .NET 3.5 기능 http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx을 확인할 수 있습니다. C++ 측면에서, 나는 당신이 동등한 것을 알고 있다고 생각한다. :)

+0

나는 그가 프로세스 내 의사 소통을 원한다고 생각합니다. C++ 프로젝트가 C# UI에서 사용하는 라이브러리 인 것처럼 들립니다. – SLaks

0

는 마샬링/demarshaling 및 COM의 오버 헤드없이 직접 C 사이의 메모리에 액세스 ++와 C#을 얻기 위해 내가 알고있는 두 가지 방법이 있습니다. 코드 네이티브의 C++ 부분을 유지해야하는 경우이 작업을 수행하는 유일한 방법은 C++ 응용 프로그램에서 clr을 호스팅하는 것입니다. 비교적 복잡한 사업. Google "공용 언어 런타임 호스팅" 그런 다음 C# 코드를 어셈블리로로드하고 C# 코드를 호출하고 공통 공유 메모리 스타일 인터페이스를 제공 할 수 있습니다. C#/.net의 공유 메모리에 대한 직접 지원은 없으므로 공유 메모리 지원을 모두 작성해야합니다.

다른 방법은 공용 언어 런타임 지원을 사용하여 C++ 코드를 컴파일하는 것입니다. 이것은 훨씬 쉬우 며 clr 기반 데이터 유형에 대한 액세스를 허용하는 동시에 C++ 및 C# 코드간에 앞뒤로 호출하는 기능을 제공하면서 C++의 모든 힘과 영광을 허용합니다. VS2008 설명서의 "CLR을 대상으로하는 언어 기능"을 참조하십시오. pin_ptr은 친한 친구가되어이 과정에서 동맹을 맺습니다.

1

C++ 프로젝트를 C++/CLI 프로젝트로 변환하는 것이 가장 쉬운 방법 일 수 있습니다. 그러나 일부 코드는 C++/CLI에서 제대로 작동하지 않습니다 (관리되는 실행 파일에 boost :: thread를 사용하는 라이브러리를 사용하는 데 문제가 있음).

관련 문제