2010-11-28 3 views
0

시간이 오래 걸리거나 관리되지 않는 DLL의 .NET 래퍼를 만들 때 명백한 & 측정 가능한 이점이 있습니까?관리되지 않는 DLL의 .NET 래퍼를 만드는 장단점은 무엇입니까?

더 많은 정보 :

  • 나는 DLL을 통제하지 않는다, 그러나 나는 최신 버전으로 교체하지 않기로 결정할 수 있습니다.
  • DLL에 많은 클래스가 있습니다. 그리고 많은 지원 열거.
  • DLL은 프로젝트에 중요한 기능을 제공합니다. 내가 아는

답변

1

몇 가지 장점 : 당신은 당신의 관리되는 래퍼에 해당 xmldoc을 넣어 때문에 IDE 내부의 모든 개발자가 사용할 문서를 가질 수

  1. .
  2. IntPtr을 모두 추상화 할 수 있습니다. 경험이 부족한 개발자의 경우 문제 및 버그의 원인이 될 수 있습니다.
  3. 관리되지 않는 DLL의 하위 수준 빌딩 블록에서 일반적인 시나리오에 대한 상위 수준의 작업을 빌드하여 오류 가능성을 줄일 수 있습니다. (물론 이것은 관리되지 않는 DLL을 래핑하는 것과 관련이 없습니다.)
1

타사 코드에서 사용하는 리소스 관리를 IDisposable 코드를 사용하여 랩핑하면 .NET 가비지 수집을 사용하여 더 이상 필요하지 않은 리소스 (파일 핸들 등)를 확보 할 수 있습니다 사용.

다른 장점 - 거의 모든 제 3 자 코드에 대한 표준은 다음과 같습니다 : 당신은 미래에 제 3 자 DLL에 발생할 수있는 변경되는 코드의 대부분을 절연하는

. 변경 사항이 있으면 래퍼 클래스의 구현을 변경하면됩니다. 나머지 코드는 변경되지 않습니다.

비 관리 코드가 부족한 경우 래퍼 클래스에 캐싱, 유효성 검사 및 오류 검사를 빌드 할 수도 있습니다.

+0

좋아, ChrisF,하지만 DLL을 업그레이드하지 않도록 선택할 수 있습니다. 그래서 나는 그 문제가 없다. –

+0

@ 피에르 - 업데이트 된 답변. – ChrisF

+0

Chris의 기여에 감사드립니다! –

2

장점 : 그것은 당신에 의존하지 않도록

  • 당신은 관리되지 않는 DLL의 자신의 로더를 작성할 수 .NET 프로젝트에서 DLL의 기능을 사용하는 것이 훨씬 쉽게

    1. LoadLibrary의 알고리즘 당신이 DLL을 포장 할 수있는 경우

      1. 작동

      의 많은입니다 : 관리되지 않는 DLL이 독립 프로세스

    단점을 유지하도록

  • 나중에 격리를 추가 할 수 있습니다 그리고 나서 당신이 필요로하는 것만으로 더 단순하고 더 작은 인터페이스를 제공하고, 그럴 가치가있을 것입니다.

    또한 DLL을 제어 할 수 없다는 것을 알고 있지만 가능하다면 .lib의 C++/CLI 래퍼는 비 관리 코드를 사용하는 훨씬 좋은 방법입니다.NET (주로이 질문을하는 다른 사용자 또는 액세스 권한을 얻을 수있는 사용자)입니다.

  • 0

    이 DLL을 C# 또는 VB.NET 프로젝트 (또는 C++/CLI를 제외한 다른 .net 언어)에서 사용하려면 합리적인 대안이 표시되지 않습니다 (관리되는 폴더를 다시 만들지 않으면 버전 DLL 완전히 처음부터). 물론 COM을 대신 사용할 수도 있지만 대부분의 경우 .NET 클라이언트 프로젝트의 관점에서 보았을 때 더 힘들고 훨씬 더 많은 결과가 발생합니다.

    편집 : 확인, 귀하의 의견에 따르면 DLL은 이미 COM DLL입니다. 물론 .NET 래퍼는 더 이상 필요하지 않습니다. 내 대답은 당신이 평범한 네이티브 C++ DLL을 가지고 있었는데, COM을 사용하면 COM 래퍼를 추가한다는 의미였습니다.

    +0

    왜 더 힘들고 더 많은 일을 할 수 있는지 자세히 설명해 주시겠습니까? 고마워요. –

    +0

    "열심히"는 상대적인 일입니다. 제 개인적인 견해 일 수 있습니다. 하지만 작년에 C++/CLI 프로그래밍을 꽤 많이했고, 네이티브 C++ DLL을 캡슐화하는 것은 정말 간단합니다. COM 프로그래밍 MFC 또는 ATL, 그러나, 내 눈에 훨씬 더 어렵습니다. 당신은 C++ - To-COM 타입 시스템 맵핑, 메모리 관리, 다른 스레딩 모델, 많은 기술적 인 것들, IMHO와 함께 싸워야합니다. IMHO 오류가 발생하기 쉽고 그렇게하기가 쉽지 않습니다. –

    3

    DLL은이 이상한 질문이지만, 중요한 세부 사항이 누락 된 많은 클래스

    있습니다. 관리 코드에서 이러한 클래스를 사용하려면 을 선택하지 말고을 선택하고 C++/CLI 래퍼를 작성하십시오. C++ 컴파일러 만 제대로 생성 할 수 있습니다. P/생성자를 호출하는 것은 기술적으로 불가능하지는 않습니다. 익스포트 된 함수 이름을 찾는 것이 상당히 어려울지라도 객체에 할당 할 메모리 양을 추측 할 수 없습니다. C++ 컴파일러 만 알고 있습니다.

    필기 작성은 그리 어렵지 않으며 대부분 기계적입니다. 링크에 대한 자세한 내용은 this answer입니다.

    +0

    어떻게? .NET 프로젝트에서 직접 DLL을 참조 할 수 있습니다. 또한 참조하지 않고 특정 기능을 가리킬 수 있습니다. –

    +0

    흠, COM 서버 여야합니다. 참조를 추가 할 때 빌드 디렉토리에 Interop.foo.dll이 있습니까? 그 (것)들을 감싸기에있는 어떤 점도 거의 없다. 글쎄, 결코. –

    +0

    아니, 네가 옳았다. 그래서 당신은 대답이 완벽합니다. –

    1

    장점 :

    1)가 관리되지 않는 DLL에있는 경우 알고리즘의 보안 일종의;

    2) GC의 병목 현상을 방지합니다. 메모리의 전체 제어;

    단점 :

    1)은 32 비트 및 64 비트 모두 당신이 64 비트 닷넷 환경을 사용하려면 관리되지 않는 DLL 빌드를 지원해야합니다;

    2) 속도 저하를 막기 위해 관리 코드와 비 관리 코드 사이에 매우 작은 인터페이스 (브리지)를 만들어야합니다. 때로는 불가능합니다.

    관련 문제