2009-11-24 3 views
2

C++ 클래스가 있습니다. 지금 쓰고 있습니다. 제가 작업중인 프로젝트 전체에 사용됩니다. 정적 라이브러리에 넣거나 dll에서 클래스를 내보낼 수있는 옵션이 있습니다. 각 접근법에 대한 이점/벌칙은 무엇입니까? 내가 생각할 수있는 유일한 것은 내가 정말로 신경 쓰지 않는 컴파일 된 코드 크기이다. 감사! DLL을의dll 대 정적 라이브러리를 반출하는 이점

답변

9

장점 :

  • 이 기능에 접속 여러 다른 exe 인의를 가질 수 있습니다, 그래서 당신은 전반적으로 작은 프로젝트 크기가됩니다.
  • 전체 exe 파일을 교체하지 않고도 구성 요소를 동적으로 업데이트 할 수 있습니다. 그래도 인터페이스가 동일하게 유지되도록주의하십시오.
  • 때때로 LGPL의 경우와 마찬가지로 DLL을 사용해야합니다.
  • C#, Python 또는 DLL에 연결된 다른 언어로 일부 구성 요소를 가질 수 있습니다.
  • 다른 버전의 DLL에서 작동하는 DLL을 사용하는 프로그램을 빌드 할 수 있습니다. 예를 들어 특정 운영 체제 DLL에 함수가 있는지 확인하고 DLL이있을 경우에만 호출하고, 그렇지 않으면 다른 처리를 수행 할 수 있습니다. 정적 라이브러리의

장점 : 당신은 단지 작은 응용 프로그램이있는 경우

  • 당신은 DLL이 방법
  • 적은 배포하는 문제를 verisoning 가질 수 없습니다, 당신은 전체 설치 프로그램을 강요하지 않습니다.
  • DLL 인 경우 액세스 할 수있는 코드에 묶이는 다른 사용자가 걱정할 필요가 없습니다.
  • 내보내기 및 가져 오기에 대해 걱정할 필요가 없으므로 정적 라이브러리를 쉽게 개발할 수 있습니다.
  • 메모리 관리가 더 쉽습니다.
+0

좋은 이유는 버전 관리를 생각하지 않았기 때문입니다. – Steve

+2

DLL 버전 문제를 피하는 한 가지 방법은 버전 번호를 DLL 파일 이름에 추가하는 것입니다 (예 : 'mydll300.dll'과 같은 접미어). –

+0

BTW, 답변을 계속 수정 해 주셔서 감사합니다. – Steve

0

Windows에서 동적 라이브러리의 가장 중요하고 종종 언급되지 않은 기능 중 하나는 DLL에 자체 힙이 있다는 것입니다. 이는 귀하의 관점에 따라 장점 또는 단점이 될 수 있지만이를 알고 있어야합니다. 예를 들어, DLL의 전역 변수는 사실상의 프로세스 간 통신이나 모호한 실행 시간 오류의 원인이 될 수있는 해당 라이브러리에 연결된 모든 프로세스간에 공유됩니다.

+1

100 % 정확하지 않습니다. DLL의 전역 변수는 프로세스마다 인스턴스화됩니다. pragma/linker 트릭을 사용하면 시스템 전역을 만들 수 있지만 기본값은 아닙니다. 그것은 Win3.1에서 William이 말했듯이 Win95/NT에서 바뀌 었습니다. – jmucchiello

관련 문제