2008-10-21 3 views
3

여러 MFC 확장 DLL을 사용하는 MFC 응용 프로그램이 있습니다. 이 응용 프로그램 (및 몇 가지 다른 유사한 응용 프로그램) .net 프레임 워크의 일부 부분에 액세스 할 수 싶습니다. 내가 원하는 모든 C++/CLI 코드를 숨길 MFC dll을 쓸 수 있기를 바란다. .net 작업을 수행하기 위해 C# 라이브러리를 썼다. 응용 프로그램은 순수한 MFC 응용 프로그램으로 유지되며 유일한 C++/CLI 코드는 새 MFX 확장 DLL에 있습니다. 그러나 내가 이것을했을 때 새로운 MFC C++/CLI dll에 액세스 할 때 응용 프로그램이 손상되었습니다. C++/CLI 코드를 응용 프로그램에 넣으면 제대로 작동하며 C#으로 계속 디버깅 할 수 있습니다.MFC 확장 DLL에서 C++/CLI

dll 아이디어가 작동하지 않는 이유를 이해하는 사람이 있습니까?

감사합니다.

+0

주소, 예외 유형 등 충돌에 대한 세부 정보를 제공하면 도움이됩니다. –

답변

1

순수 네이티브 코드로 관리되는 어셈블리를 참조 할 수 없습니다. 소비자의/clr 스위치 (프로젝트 전체 또는 특정 파일)를 뒤집거나 일부 interop을 수행해야합니다.

소비자가 순수 네이티브를 말할 수있게 해주는 하나의 interop 옵션은 COM Callable Wrapper을 통해 관리되는 어셈블리로 호출됩니다.

0

MFC dll 프로젝트는 C# 라이브러리를 참조하고/clr로 컴파일 된 하나의 파일로 인터페이스를 C# 라이브러리에 처리합니다. 실제로이 작업을 런타임에 가끔 보았지만 MFC dll 또는 C# 코드로 디버깅 할 수 없었습니다. 그러나 대부분의 경우 안정성과 충돌이 전혀없는 것처럼 보입니다.

1

나는 비슷한 문제가 발생했다고 생각합니다. 내 설정은 비슷했다 - 순수 MFC DLL을 가진 순수한 MFC 응용 프로그램이 차례로 C++/CLI DLL과 상호 작용했다. 모든 것이 정상적으로 실행되지만 종료시 충돌이 발생합니다. 문제는 CppUnit을 사용하여 순수한 MFC DLL을 테스트하는 동안 악화되었습니다.

디버깅에서 버그로 인해 내 C++ 코드가 종료시 액세스 위반 (매달린 포인터를 통해 참조되는 개체)에 대한 첫 번째 예외가 발생한다는 것을 알았습니다. 이제 C++ 런타임은 종료시 이러한 위반을 무시하지만 CLR은 종료하지 않습니다. CLR 런타임은 처리되지 않은 예외를 throw하여 프로그램/유닛 테스트가 중단 된 것처럼 보입니다.

당신의 문제는 다를 수 있지만, 내가 가지고있는 것과 아주 유사하게 들립니다.