현재 C#으로 구성되어 있는 솔루션에 통신모듈을 붙여야 하는데 서버는 C++로 구성되어 있다.
어차피 소켓을 통신을 할때니 C#용 통신라이브러리 만들고 C++용 통신 라이브러리를 만들어서 해도 되지만 이건 뭔가 시간낭비!
C++ 이나 C#으로 만든 라이브러리를 다른 언어에서 사용할수 있는 방법을 찾아보았다.
일단 .NET Framework 에서 제공하는 혼합모드(Mixed Mod) 라는 것이있는데 Managed 로 구성된 부분과 Native로 구성된 부분간의 상호작용(Interop)를 해결하기 위한 내용이다.
방법은 여러가지가 있는데 현재 상황에 가장 간단한 방법은 Native C++ 로 통신 모듈 DLL을 구현하고 서버에선 는 이걸 바로 사용.
C#으로 구현되어 있는 클라이언트 쪽은 Managed C++(2005에선 C++/CLI) 로 랩핑을 해서 사용하면 될듯하다.
-> Native DLL 프로젝트를 만들고 Managed DLL 프로젝트를 만들어서 종속성을 걸고 C# 프로젝트를 만들어 Managed DLL에 참조를 연결해 준다.
Managed DLL에서 Native DLL을 정상적으로 사용하기 위해선 stdafx.h 내부에
#include <afxwin.h> // MFC 핵심 및 표준 구성 요소입니다.
#include <afxext.h> // MFC 확장입니다.
를 넣어준다.
이후 Native C++ 와 Managed C++ 간의 데이터 교환법이나 문법을 좀 익혀야 한다.
Managed C++ 과 C#은 같은 .NET Framework 상에 있어서 둘간의 상호작용은 아무런 문제가 없다.
(대부분의 내용을 회사동료인 현정씨가 알려줬다. 캄사캄사 하시는 일도 바쁘실 텐데..)
관련내용 링크들.
네이티브 및 .NET 상호 운용성
http://msdn2.microsoft.com/ko-kr/library/zbz07712.aspx
C++ Interop 사용(암시적 PInvoke)
http://msdn2.microsoft.com/ko-kr/library/2x8kf7zx.aspx
혼합 모드에서 디버깅
http://msdn2.microsoft.com/ko-kr/library/kbaht4dh.aspx
C++ 에서 다양한 문자열 데이타 타입간의 호환, 변환
http://msdn2.microsoft.com/ko-kr/library/ms235631.aspx
좋은정보 감사합니다. 🙂