2012-11-10 2 views
0

다른 프로젝트에서 사용하려는 DLL 안에 클래스가 있습니다. 나는이 작업을 수행하는 방법에 대한 this tutorial를 읽고 내 의사 코드DLL 내에서 클래스 사용

#ifdef EXPORT 
#define SOMEAPI __declspec(dllexport) 
#else 
#define SOMEAPI __declspec(dllimport) 
#endif 

struct ISomeInterface 
{ 
    virtual void SomeMethod()=0; 
}; 

typedef ISomeInterface* SOMEHANDLE; 

#define EXTERN_C  extern "C" 

EXTERN_C SOMEAPI SOMEHANDLE WINAPI CreateSomething(VOID); 

interface.h이

처럼 보인다 그리고 나는 ISomeInterfaceCreateSomething 구현 SomeDLL.dll 있습니다.
클라이언트에서 이것을 사용하려고하면 링커 오류가 발생합니다. 클라이언트는 다음과 같습니다
Client.cpp

#include "interface.h" 
SOMEHANDLE h = ::CreateSomething(); // Linker error here: Unresolved external 

나는이 문제를 해결 할 수 있습니다 VC의 클라이언트 프로젝트의 종속성 ++로 DLL 프로젝트를 추가하여. 그러면 모든 것이 좋습니다.
이 문제는 내가 standalong dll을 사용하고 싶다면 무엇입니까? 링커 에러를 제거하려면 어떻게해야합니까?

+0

런타임시 DLL을로드하고 클라이언트 용 인터페이스를 래핑 할 수있는 정적 라이브러리를 제공해야 할 수도 있습니다. 보십시오 [여기] (http://stackoverflow.com/questions/3360828/plugin-pattern-with-dll-how-can-i-extract-plugin-interface-from-dll) –

답변

0

나는 클라이언트 프로젝트

예, 자동 손으로 독립형 프로젝트에해야 할 한 가지를 수행의 종속성으로 DLL 프로젝트를 추가하여이 문제를 해결할 수 있습니다. 프로젝트 + 속성, 링커, 입력, 추가 종속성 설정. DLL 프로젝트에 의해 생성 된 .lib 파일을 추가하십시오. 가져 오기 라이브러리는 DLL에서 내 보낸 함수에 대해 링커에 알립니다.

+0

감사합니다. 필자는'#pragma comment (lib, "FormatDriveDLL.lib")'를 추가하여이 문제를 해결할 수있었습니다. 그러나 당신은 이것을 자동으로하고 있습니다. – atoMerz