2014-01-23 4 views
2

나는 제어 할 수없는 32 비트 응용 프로그램이 있습니다. 현재 32 비트 C++ DLL과 통신하여 데이터를 마사지하고이를 32 비트 .NET DLL로 전달합니다.이 DLL을 사용하여 C# 응용 프로그램에 연결할 수 있습니다. 더 큰 메모리 액세스를 얻으려면 C# app를 64 비트로 업그레이드하고 싶습니다.x64에서 x64 로의 프로세스 간 프로세스에 .NET Concurrent Collections를 사용할 수 있습니까?

32 비트 C++ DLL을 .NET Concurrent Collections, 특히 ConcurrentQueue와 통신 할 수있는 방법이 있습니까? 프로세스 간 통신을 허용합니까? 그렇다면 내가 배울 수있는 예가 있습니까? 그렇지 않은 경우, 양방향 32-64 비트 프로세스 간 통신을 해결하기 위해 API 또는 라이브러리에 대해 알고있는 사람이 있습니까?

이것은 많은 개발자에게 큰 문제가 될 것으로 보이지만 내 검색은 빠르고 안정적이며 쉬운 솔루션을 발견하지 못했습니다. 주요 구성 요소 개발자가 솔루션을 제공하지 않는다는 것이 이상하다는 것을 알게되었습니다.

미리 도움을 청하십시오.

+1

COM interop은 .NET 개체를 사용하기 위해 기본 C++ 응용 프로그램을 얻는 일반적인 방법입니다. System.Collections의 클래스에서 작동하지만 [ComVisible] 특성을가집니다. 프로세스와 비트 경계를 넘어서 작동합니다. 그러나 동시 수집을위한 것은 아니며 일반적입니다. COM은 일반 클래스를 지원하지 않습니다. 그것이 끝나는 곳입니다. –

답변

2

32 비트 및 64 비트 응용 프로그램과 dll을 in-process로 혼합 할 방법이 없습니다.

당신은 다음 몇 가지 옵션을 가지고 32 비트 및 64 비트 응용 프로그램 사이의 통신을하려면

:

  1. COM 개체로 패키지 최대 32 비트 라이브러리 및 프로세스에서 그것을 호스팅합니다. COM은 64 비트에서 32 비트로 호출을 마샬링하고 다시 호출합니다.

  2. IPC (명명 된 파이프, TCP 또는 WCF와 같은)를 사용하여 32 비트와 64 비트 응용 프로그램간에 통신합니다.

  3. 메모리 매핑 된 파일을 사용하여 공유 데이터 구조를 사용하여 데이터를 교환합니다. 이것은 아마도 가장 복잡한 해결책 일 것입니다.

+0

이것이 내가 예상 한 것입니다. 누구든지 도우미 라이브러리 및/또는 사용할 수있는 다양한 방법에 대한 예제 코드를 알고 있습니까? 부동 소수점 데이터의 작은 덩어리에 가장 빠른 방법은 무엇입니까? – Iststd