2012-09-02 3 views
0

과거에는 다른 응용 프로그램에서 만든 DLL을 사용했습니다. 자, 내 소원은 dll 파일을 만드는 방법을 배우는 것입니다. 그래서 Visual Studio 2008의 dll 파일을 C++ 프로젝트로 개발하기 시작했습니다.종속성이없는 DLL 파일 만들기

튜토리얼을 따른 후, 나는 dll 프로젝트를 성공적으로 만들었습니다. 그리고 앞서 언급 한 dll을 테스트 할 다른 C++ 콘솔 응용 프로그램을 만들었을 때 이전 DLL 프로젝트의 lib 파일과 헤더 파일을 포함해야한다는 것을 경험했습니다. 자체 헤더를 포함하는 것 같아요 내 프로젝트를 구현하는 방법에 따라 달라집니다.하지만, 클라이언트 응용 프로그램에서 lib 파일을 포함하는 것은 어떨까요?

추가 의존성이 아닙니까? 내 질문에 명확하지 않다면 간단히 다시 설명하겠습니다 : VS2008 C++ 프로젝트로 dll 파일을 만들었습니다. 다른 C++ 프로젝트에서 dll에 액세스하려고하면 이전 프로젝트의 lib 파일을 포함해야했습니다. 그래서, 나는 어떻게하면 종속물을 포함시키지 않고도 클라이언트 응용 프로그램에서 DLL을 사용하지 않을 수 있는지 알고 싶습니다 ...

내 말을 이해하지 못하면 죄송합니다 ... 나는 dll 관련 항목에 초보자입니다. ... 당신은이 문제가

답변

0

(LibB 라이브러리가 LIBA이고 다른 라이브러리가 있다고 가정) :

  1. 헤더 의존성 : LIBA는 파일의 헤더 파일을 읽을 수있는 지시문 #을 갖고있는 것 같다 헤더 LibB. 이 경우 LIbA를 다른 프로젝트에로드 할 때 LibB 헤더 경로를 포함하지 않으면 #include를 확인할 수 없습니다. 이를 피하려면 LibB 헤더가 .h 파일이 아닌 .cpp 파일에만 나타나는 방식으로 LibA를 작성해야합니다. 하나의 옵션은 이것을 위해 "Forward Declaration"을 사용하는 것입니다 (인터넷에서 체크하면 많은 것을 배울 것입니다, 기본을 반복하는 것은 쓸모가 없습니다).

  2. 라이브러리 종속성 : .dll이 다른 .dll에 종속되어있는 경우 LibA가 LibB없이 작동하지 않기 때문에 두 라이브러리를 모두 사용할 수는 없습니다. 한 가지 해결책은 LibB를 정적 라이브러리로 사용하고 LibA에서 정적으로 링크하는 것입니다. LibA.dll에 포함되어 있으므로이 두 가지가 필요합니다 (LibB 바이너리는 이제 LibA 파일 안에 있습니다).

1

LIB 파일은 런타임에 DLL을로드하기위한 코드가 들어있는 가져 오기 라이브러리입니다. Visual Studio는 사용자의 편의를 위해이를 생성하므로 클라이언트 응용 프로그램에 일련의 상용구 가져 오기 코드를 작성할 필요가 없습니다.

Lib 파일은 정적으로 링크되어 있으므로 클라이언트 응용 프로그램과 관련된 추가 종속성은 없습니다.