2012-05-17 5 views
0

Codeproject TreeGrid 예제에서 작성한 사용자 지정 Listview Treegrid가 here입니다. 코드는 시간이 지남에 따라 광범위하게 수정되었습니다..Net의 비 관리 코드

C++ 프로젝트를 C# Winforms로 포팅해야한다는 요구 사항이 있습니다. ListView 그리드에 대한 C + + DLL을 만들고 Winforms에서 상호 운용하도록 생각하고 있습니다.

Winforms에서 관리되지 않는 Listview 컨트롤을 사용하는 데 문제가 있습니까? Winforms에서리스트 뷰를 포트/재 작성해야합니까? (나도 기대하지 않는 임무)

+1

내가 생각하는 것입니다. –

+0

유일한 요구 사항은 모양과 느낌을 Winforms 앱에 가져 오는 것입니다. 나는 지금 그것을하는 방법의 선택권을 탐구하고있다. –

+0

관리되는 C++은 무엇입니까? –

답변

0

내가 당신이라면 C#으로 Listview를 다시 작성하거나 C#으로 작성된 무료 또는 유료 그리드를 찾고 Winforms에서 사용하기위한 것입니다.

이 작업을 수행 한 후에 코드를 지원해야한다는 것을 잊지 마십시오. 에는 버그 수정 및 기능 추가가 포함되어있을 수 있습니다. 코드의 작동 방식과 디버깅 방법을 정확히 알고있는 것이 좋습니다. 또한 사용자의 요구에 더 적합한 Listview를 작성할 수있는 기회를 제공합니다.

이 C++ Listview를 사용하고 Winforms에서 사용하면이 작업은 상당히 어려울 것입니다. 당신이 그것을 사용하여 결정하는 경우 하지만, 내가 생각할 수있는 두 가지 옵션이 있습니다 :

  1. 개체를 유지하고 C#에서 데이터를 표시합니다 C++/CLI에서 목록보기의 래퍼 만들기는,이 것을 의미한다 Listview에서 C# 개체로 데이터를 옮기기 위해 많은 변환 코드를 작성해야하지만 작동해야합니다.

  2. DllImport를 사용하고 ListView를 데이터 소스로 사용하여 실제로 모든 데이터를 가져올 수는 없지만 추한 CLI 코드를 작성할 수는 없습니다 ...

그래서 UI 코드에 대해 하나의 언어를 사용하는 것이 좋으며 UI 언어는 C#이 아니라 C#입니다.

행운을 빌어 요 ... 누군가가 그들은 아마도 이식 된 버전의 네이티브 코드를 원하지 않는 C 번호로 C++에서 포트를 요구한다면,

+0

Shahar에게 감사드립니다 ... 나는 C++ 버전을 유지하는 것이 얼마나 엉망인지 알아보기 시작했습니다. 무료/유료 그리드를 찾을 수 없다면 나는 이식 할 것입니다. 나는 당신에게 대답을 주겠다. –

1

관리 코드로 다시 쓰는 것이 가장 좋을 것이라고 생각합니다.

일반적으로 상호 운용성이 작동하지만 관리 코드가 선호됩니다. 런타임은 많은 것을 처리해 주며 모든 것을 관리하는 것이 더 쉽습니다. 일부 작업에서는 경계를 넘는 것이 문제가 될 수 있습니다. 예를 들어 코드 액세스 보안도 잃게됩니다. 좋은 정보가 있습니다 here.

그렇지 않으면 항상 .NET 개발자와 C++ 개발자가 필요합니다.

C++/네이티브 코드 자체에는 별다른 차이가 없지만 둘을 혼합하면됩니다. 나는 당신이해야 할 일이 없으면 혼합하지 않는 것이 장기적으로 더 낫다고 생각합니다.

그러나 시간과 예산 제약이 있습니다. Interop은 이유가 있습니다. 비즈니스 감각을 정당화하기에는 너무 오랜 시간이 걸리면 위의 권장 사항을 철회합니다.

+0

필요한 마샬링/정리 코드의 의미를 확인합니다. interop을 고려한 유일한 이유는 시간과 예산이었습니다. 또한 C++ 버전은 계속 존재하므로 우리가 포트하는 경우 유지할 두 개의 코드베이스가 있습니다. –

+0

그 이유는 유효한 이유입니다. 그것은 당신에게 달려 있습니다. *** 개인적으로 *** 우리의 코드라면이 포트를 포팅 하겠지만, 모든 것을 포팅하고자하는 경향이 있습니다. 우리를 위해 업데이트 된 코드베이스를 유지하면 쉽게 유지 관리 작업을 수행 할 수 있습니다. 하지만 그건 당신에게 문제가되지 않는다. 문제가없는 한 관리되지 않는 버전을 사용하는 것에 대한 타당한 이유가 있다고 생각한다. – David