2009-03-18 4 views

답변

3

많은 "변환"이 필요하지 않습니다. 단지/clr을 활성화하고 컴파일 할 수 있습니다. 빌드 오류는 있지만 엄청난 숫자는 아닙니다.

이것은 이 아니라이 가볍게 처리되어야한다는 결정입니다.

  • 빌드 성능이 특히 연결, 많은 악화 : 당신은 /의 CLR 임계 값을 교차하면 당신은 몇 가지를 희생. C++/clr 프로젝트를 점진적으로 링크 할 수 없습니다.

  • .Exe 또는 .Dll에 추가 로딩 레이어가 추가됩니다. 특히 statics에서는 초기화 순서에주의해야합니다. 이것은 VS2005로 빤히 쳐다 보았지만 아직도 딸꾹질이 있습니다. 올바르게 언로드되지 않는/clr DLL 프로젝트가 있는데 그 이유를 파악할 수 없었습니다. 이러한 문제 중 하나의 증상은 디버그에서 메모리 누출 감지 dumpon 종료를 얻지 못한다는 것입니다.

  • 프로젝트에 기능을 추가하면 관리 또는 기본 구현 중 하나를 선택할 수 있습니다. 프로젝트의 다른 곳에서 수행되는 작업을 위해 관리 작업을 수행하려면 이전 구현을 수정해야합니까?

  • 관리되는 기본 임계 값을 초과하면 성능 및 디버깅 관련 사항이 있습니다.

  • 예외 처리가 더욱 복잡해집니다.

전체 프로젝트에서/clr 스위치를 전환하는 대신 훨씬 더 목표를 둔 방법을 사용하는 것이 좋습니다. 대규모 라이브러리를 기본으로 유지하십시오. 혼합 모드/clr 부트 스트랩퍼/래퍼를 만듭니다. 이 "씬 프록시"는 네이티브 라이브러리의 안정성과 성능을 유지하면서 네이티브 라이브러리에 대한 액세스의 이점을 제공합니다.

네이티브 라이브러리에 대화 상자가 있거나 더 나쁜 SDI/MDI보기가있는 경우 (here 참조) 디스플레이를 연결하는 것이 까다로울 수 있습니다. 그러나 그만한 가치가있을 것입니다.

+0

대형 프로젝트에서/clr 플래그를 혼란에 빠뜨리면 나도 어쩔 수 없습니다. 네이티브 코드의 대부분을 DLL로 분리하는 것이 최선의 방법이라는 데 동의합니다. – Nick

0

VC++ .net, 내가 잘못 생각하지 않는다면 새로운 버전의 MFC가 있습니다. 프로젝트를 VC.net 프로젝트로 변환 한 다음 클래스를 관리되는 코드로 천천히 변환하십시오. 이것은 모든 것을 재 작성하는 거대한 점프보다는 모든 것을 천천히 재 설계하는 변경을 제공합니다. Btw, MVC 디자인 패턴으로 내부 작업에서 인터페이스를 분리하지 않았다면.

관련 문제