안녕하세요 동상이몽입니다.
이틀동안 구글링을 때렸는데도 도저히 알 수가 없네요.
제가 어떤 장비의 라이브러리 (MFC로 만들어져있습니다)를 C# 어플리케이션에서 로딩해서 어떤 작업을 해야하는데요.
이 장비 라이브러리의 공용 함수 명세가 아래와 같습니다.
CString PublicFunction(int param1, int param2);
이걸 C#에서 로딩해서 사용해야하는데요.
지금까지 검색해본결과, C#에서 Unmanaged Dll을 로딩하는 방법은,
1. WIN32Api를 사용하여 LoadLibrary, GetProcessAddress, FreeLibrary등의 함수를 응용하는 방법
2. DllImportAttribute를 사용하는 방법
이 두가지입니다.
그런데 문제는 이 2가지 방법으로는 CString형의 Return Value를 받아 올 수 있는 방법이 없더군요.
이틀째 연구중인데, 구글링에서 돌아오는 답변은 .Net에서는 CString을 받아 올 수 있는 방법이 없이니, MFC Library를 랩핑한 다른 라이브러리를 하나 만들어서 써라..
라는 답이 대다수더군요.
장비의 라이브러리가 항상 바뀔 수 있기때문에 랩핑 라이브러리를 만드는 방법이 굉장히 비효율적이에요.
장비 라이브러리가 바뀔때마다 랩핑 라이브러리도 바꿔줘야한다는 말이 되거든요...
혹시 CString 바로 처리할 수 있는 방법이 없을까요?
요약.
MFC로 만들어진 함수의 Return Type이 CString인데, C#에서 CString Type을 받아처 처리할 수 있는 방법이 있는가? 입니다.
MFC로 만들어진 함수의 Return Type이 CString인데, C#에서 CString Type을 받아처 처리할 수 있는 방법이 있는가? 입니다. -> 참고로 래핑하실 때에 저 경우 StringBuilder를 알아보세요
@CrazyBird 답변 감사합니다. CLR 한번 알아봐야겠네요.
회사 일은 좋은 결과 있으시길 바랍니다. 일하면서 월급 못받으면 마음이 많이 아프죠. 좋은 결과 꼭 있을겁니다.
어차피 MFC나 .NET이나 까보면 전부다 010101010이죠.
간단합니다. 솔루션에 .NET나라 사람이 있고 MFC(C++)나라 사람이 있죠? 근데 두나라 사람 말 달라서 서로 이야기를 못하네요. 고뢔~? 안되겠어~ 사람 불러야해 ㅋㅋㅋ
통역관이 필요하겠죠? 그래서 만든게 CLR C++입니다. CLR C++로 해당 DLL을 포함한 후 하나하나 정성스레 래핑해준 다음 CLR C++ library(dll)을 C#프로젝트에서 포함시킵니다. 그럼 끝!! 그럼 MFC나라 사람이랑 C#나라 사람은 CLR C++ 통역관이 잘 번역해줘서 행복하게 오래오래 살아간답니당.
아놔 그나저나 회사에서 세달째 월급도 안 나오고 이직 알아보고 있는데 실 경력이 1년 2개월밖에 안되니 어디 옮기려고 해도 엄청 애매하네요. ㅠㅠ 누가 저좀 모셔 가세요 흑흑 회사생활은 1년 2개월이지만 실 개발은 거의 3년차랍니당 ㅠㅠ